diff --git a/.gitignore b/.gitignore
index c747950..4a6a42e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,70 @@
*.o
dwm
+### C template
+# Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.elf
+
+# Linker output
+*.ilk
+*.map
+*.exp
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.hex
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+
+### CMake template
+CMakeLists.txt.user
+CMakeCache.txt
+CMakeFiles
+CMakeScripts
+Testing
+Makefile
+cmake_install.cmake
+install_manifest.txt
+compile_commands.json
+CTestTestfile.cmake
+_deps
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..0889025
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+yo_dwm
\ No newline at end of file
diff --git a/.idea/discord.xml b/.idea/discord.xml
new file mode 100644
index 0000000..d8e9561
--- /dev/null
+++ b/.idea/discord.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..973f941
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..35746ae
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..3ed3933
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations/install.xml b/.idea/runConfigurations/install.xml
new file mode 100644
index 0000000..312cc9d
--- /dev/null
+++ b/.idea/runConfigurations/install.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/yo-dwm.iml b/.idea/yo-dwm.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/.idea/yo-dwm.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..495944d
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,31 @@
+cmake_minimum_required(VERSION 3.23)
+project(yo_dwm C)
+
+set(CMAKE_C_STANDARD 11)
+
+include_directories(.)
+include_directories(src)
+include_directories(src/keys)
+include_directories(src/layouts)
+
+add_executable(yo_dwm
+ src/keys/keys.c
+ src/keys/keys.h
+ src/layouts/centeredmaster.c
+ src/layouts/centeredmaster.h
+ src/layouts/fibonacci.c
+ src/layouts/grid.c
+ src/layouts/layouts.h
+ src/layouts/monocle.c
+ src/layouts/tile.c
+ src/colors.h
+ src/config.h
+ src/drw.c
+ src/drw.h
+ src/dwm.c
+ src/movestack.c
+ src/transient.c
+ src/util.c
+ src/util.h src/keys/mouse.c src/keys/mouse.h src/keys/functions.h src/dwm.h src/colors/dracula.h)
+
+target_link_libraries(yo_dwm X11 Xft Xinerama)
diff --git a/cmake-build-debug/.cmake/api/v1/query/cache-v2 b/cmake-build-debug/.cmake/api/v1/query/cache-v2
new file mode 100644
index 0000000..e69de29
diff --git a/cmake-build-debug/.cmake/api/v1/query/cmakeFiles-v1 b/cmake-build-debug/.cmake/api/v1/query/cmakeFiles-v1
new file mode 100644
index 0000000..e69de29
diff --git a/cmake-build-debug/.cmake/api/v1/query/codemodel-v2 b/cmake-build-debug/.cmake/api/v1/query/codemodel-v2
new file mode 100644
index 0000000..e69de29
diff --git a/cmake-build-debug/.cmake/api/v1/query/toolchains-v1 b/cmake-build-debug/.cmake/api/v1/query/toolchains-v1
new file mode 100644
index 0000000..e69de29
diff --git a/cmake-build-debug/.cmake/api/v1/reply/cache-v2-313721cdec34a4e3a16d.json b/cmake-build-debug/.cmake/api/v1/reply/cache-v2-313721cdec34a4e3a16d.json
new file mode 100644
index 0000000..9eda12f
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/cache-v2-313721cdec34a4e3a16d.json
@@ -0,0 +1,1031 @@
+{
+ "entries" :
+ [
+ {
+ "name" : "CMAKE_ADDR2LINE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/addr2line"
+ },
+ {
+ "name" : "CMAKE_AR",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/ar"
+ },
+ {
+ "name" : "CMAKE_BUILD_TYPE",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ..."
+ }
+ ],
+ "type" : "STRING",
+ "value" : "Debug"
+ },
+ {
+ "name" : "CMAKE_CACHEFILE_DIR",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "This is the directory where this CMakeCache.txt was created"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/suckless_utils/yo-dwm/cmake-build-debug"
+ },
+ {
+ "name" : "CMAKE_CACHE_MAJOR_VERSION",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Major version of cmake used to create the current loaded cache"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "3"
+ },
+ {
+ "name" : "CMAKE_CACHE_MINOR_VERSION",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Minor version of cmake used to create the current loaded cache"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "23"
+ },
+ {
+ "name" : "CMAKE_CACHE_PATCH_VERSION",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Patch version of cmake used to create the current loaded cache"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "2"
+ },
+ {
+ "name" : "CMAKE_COMMAND",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to CMake executable."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/cmake"
+ },
+ {
+ "name" : "CMAKE_CPACK_COMMAND",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to cpack program executable."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/cpack"
+ },
+ {
+ "name" : "CMAKE_CTEST_COMMAND",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to ctest program executable."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/ctest"
+ },
+ {
+ "name" : "CMAKE_C_COMPILER",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "C compiler"
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/cc"
+ },
+ {
+ "name" : "CMAKE_C_COMPILER_AR",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "A wrapper around 'ar' adding the appropriate '--plugin' option for the GCC compiler"
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/gcc-ar"
+ },
+ {
+ "name" : "CMAKE_C_COMPILER_RANLIB",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "A wrapper around 'ranlib' adding the appropriate '--plugin' option for the GCC compiler"
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/gcc-ranlib"
+ },
+ {
+ "name" : "CMAKE_C_FLAGS",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the C compiler during all build types."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_C_FLAGS_DEBUG",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the C compiler during DEBUG builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : "-g"
+ },
+ {
+ "name" : "CMAKE_C_FLAGS_MINSIZEREL",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the C compiler during MINSIZEREL builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : "-Os -DNDEBUG"
+ },
+ {
+ "name" : "CMAKE_C_FLAGS_RELEASE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the C compiler during RELEASE builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : "-O3 -DNDEBUG"
+ },
+ {
+ "name" : "CMAKE_C_FLAGS_RELWITHDEBINFO",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the C compiler during RELWITHDEBINFO builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : "-O2 -g -DNDEBUG"
+ },
+ {
+ "name" : "CMAKE_DLLTOOL",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "CMAKE_DLLTOOL-NOTFOUND"
+ },
+ {
+ "name" : "CMAKE_EDIT_COMMAND",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to cache edit program executable."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/ccmake"
+ },
+ {
+ "name" : "CMAKE_EXECUTABLE_FORMAT",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Executable file format"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "ELF"
+ },
+ {
+ "name" : "CMAKE_EXE_LINKER_FLAGS",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during all build types."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_EXE_LINKER_FLAGS_DEBUG",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during DEBUG builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_EXE_LINKER_FLAGS_MINSIZEREL",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during MINSIZEREL builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_EXE_LINKER_FLAGS_RELEASE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during RELEASE builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during RELWITHDEBINFO builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_EXPORT_COMPILE_COMMANDS",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Enable/Disable output of compile commands during generation."
+ }
+ ],
+ "type" : "BOOL",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_EXTRA_GENERATOR",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Name of external makefile project generator."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_GENERATOR",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Name of generator."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "Ninja"
+ },
+ {
+ "name" : "CMAKE_GENERATOR_INSTANCE",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Generator instance identifier."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_GENERATOR_PLATFORM",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Name of generator platform."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_GENERATOR_TOOLSET",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Name of generator toolset."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_HOME_DIRECTORY",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Source directory with the top level CMakeLists.txt file for this project"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/suckless_utils/yo-dwm"
+ },
+ {
+ "name" : "CMAKE_INSTALL_PREFIX",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Install path prefix, prepended onto install directories."
+ }
+ ],
+ "type" : "PATH",
+ "value" : "/usr/local"
+ },
+ {
+ "name" : "CMAKE_INSTALL_SO_NO_EXE",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Install .so files without execute permission."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "0"
+ },
+ {
+ "name" : "CMAKE_LINKER",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/ld"
+ },
+ {
+ "name" : "CMAKE_MAKE_PROGRAM",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "No help, variable specified on the command line."
+ }
+ ],
+ "type" : "UNINITIALIZED",
+ "value" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/ninja/linux/ninja"
+ },
+ {
+ "name" : "CMAKE_MODULE_LINKER_FLAGS",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of modules during all build types."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_MODULE_LINKER_FLAGS_DEBUG",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of modules during DEBUG builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of modules during MINSIZEREL builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_MODULE_LINKER_FLAGS_RELEASE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of modules during RELEASE builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of modules during RELWITHDEBINFO builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_NM",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/nm"
+ },
+ {
+ "name" : "CMAKE_NUMBER_OF_MAKEFILES",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "number of local generators"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "1"
+ },
+ {
+ "name" : "CMAKE_OBJCOPY",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/objcopy"
+ },
+ {
+ "name" : "CMAKE_OBJDUMP",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/objdump"
+ },
+ {
+ "name" : "CMAKE_PLATFORM_INFO_INITIALIZED",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Platform information initialized"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "1"
+ },
+ {
+ "name" : "CMAKE_PROJECT_DESCRIPTION",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Value Computed by CMake"
+ }
+ ],
+ "type" : "STATIC",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_PROJECT_HOMEPAGE_URL",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Value Computed by CMake"
+ }
+ ],
+ "type" : "STATIC",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_PROJECT_NAME",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Value Computed by CMake"
+ }
+ ],
+ "type" : "STATIC",
+ "value" : "yo_dwm"
+ },
+ {
+ "name" : "CMAKE_RANLIB",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/ranlib"
+ },
+ {
+ "name" : "CMAKE_READELF",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/readelf"
+ },
+ {
+ "name" : "CMAKE_ROOT",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to CMake installation."
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23"
+ },
+ {
+ "name" : "CMAKE_SHARED_LINKER_FLAGS",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of shared libraries during all build types."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_SHARED_LINKER_FLAGS_DEBUG",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of shared libraries during DEBUG builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of shared libraries during MINSIZEREL builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_SHARED_LINKER_FLAGS_RELEASE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of shared libraries during RELEASE builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of shared libraries during RELWITHDEBINFO builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_SKIP_INSTALL_RPATH",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "If set, runtime paths are not added when installing shared libraries, but are added when building."
+ }
+ ],
+ "type" : "BOOL",
+ "value" : "NO"
+ },
+ {
+ "name" : "CMAKE_SKIP_RPATH",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "If set, runtime paths are not added when using shared libraries."
+ }
+ ],
+ "type" : "BOOL",
+ "value" : "NO"
+ },
+ {
+ "name" : "CMAKE_STATIC_LINKER_FLAGS",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of static libraries during all build types."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_STATIC_LINKER_FLAGS_DEBUG",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of static libraries during DEBUG builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of static libraries during MINSIZEREL builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_STATIC_LINKER_FLAGS_RELEASE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of static libraries during RELEASE builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Flags used by the linker during the creation of static libraries during RELWITHDEBINFO builds."
+ }
+ ],
+ "type" : "STRING",
+ "value" : ""
+ },
+ {
+ "name" : "CMAKE_STRIP",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "Path to a program."
+ }
+ ],
+ "type" : "FILEPATH",
+ "value" : "/usr/bin/strip"
+ },
+ {
+ "name" : "CMAKE_UNAME",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "uname command"
+ }
+ ],
+ "type" : "INTERNAL",
+ "value" : "/usr/bin/uname"
+ },
+ {
+ "name" : "CMAKE_VERBOSE_MAKEFILE",
+ "properties" :
+ [
+ {
+ "name" : "ADVANCED",
+ "value" : "1"
+ },
+ {
+ "name" : "HELPSTRING",
+ "value" : "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo."
+ }
+ ],
+ "type" : "BOOL",
+ "value" : "FALSE"
+ },
+ {
+ "name" : "yo_dwm_BINARY_DIR",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Value Computed by CMake"
+ }
+ ],
+ "type" : "STATIC",
+ "value" : "/home/anas/suckless_utils/yo-dwm/cmake-build-debug"
+ },
+ {
+ "name" : "yo_dwm_IS_TOP_LEVEL",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Value Computed by CMake"
+ }
+ ],
+ "type" : "STATIC",
+ "value" : "ON"
+ },
+ {
+ "name" : "yo_dwm_SOURCE_DIR",
+ "properties" :
+ [
+ {
+ "name" : "HELPSTRING",
+ "value" : "Value Computed by CMake"
+ }
+ ],
+ "type" : "STATIC",
+ "value" : "/home/anas/suckless_utils/yo-dwm"
+ }
+ ],
+ "kind" : "cache",
+ "version" :
+ {
+ "major" : 2,
+ "minor" : 0
+ }
+}
diff --git a/cmake-build-debug/.cmake/api/v1/reply/cmakeFiles-v1-ad9218d2c69b47be0e82.json b/cmake-build-debug/.cmake/api/v1/reply/cmakeFiles-v1-ad9218d2c69b47be0e82.json
new file mode 100644
index 0000000..b816a49
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/cmakeFiles-v1-ad9218d2c69b47be0e82.json
@@ -0,0 +1,406 @@
+{
+ "inputs" :
+ [
+ {
+ "path" : "CMakeLists.txt"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineSystem.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystem.cmake.in"
+ },
+ {
+ "isGenerated" : true,
+ "path" : "cmake-build-debug/CMakeFiles/3.23.2/CMakeSystem.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystemSpecificInitialize.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompilerId.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCompilerIdDetection.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ADSP-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ARMCC-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ARMClang-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/AppleClang-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Borland-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Bruce-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompilerInternal.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Compaq-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Cray-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Embarcadero-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Fujitsu-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GHS-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/HP-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IAR-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Intel-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/LCC-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/MSVC-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/NVHPC-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/NVIDIA-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/PGI-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/PathScale-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SCO-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SDCC-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SunPro-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/TI-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Watcom-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/XL-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/XLClang-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/zOS-C-DetermineCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeFindBinUtils.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-FindBinUtils.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompiler.cmake.in"
+ },
+ {
+ "isGenerated" : true,
+ "path" : "cmake-build-debug/CMakeFiles/3.23.2/CMakeCCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystemSpecificInformation.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeGenericSystem.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeInitializeConfigs.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/UnixPaths.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCInformation.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeLanguageInformation.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-C.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux-GNU-C.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux-GNU.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCommonLanguageInclude.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCCompiler.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCompilerCommon.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompilerABI.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseImplicitIncludeInfo.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseImplicitLinkInfo.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseLibraryArchitecture.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCompilerCommon.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompilerABI.c"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompileFeatures.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Internal/FeatureTesting.cmake"
+ },
+ {
+ "isCMake" : true,
+ "isExternal" : true,
+ "path" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompiler.cmake.in"
+ },
+ {
+ "isGenerated" : true,
+ "path" : "cmake-build-debug/CMakeFiles/3.23.2/CMakeCCompiler.cmake"
+ }
+ ],
+ "kind" : "cmakeFiles",
+ "paths" :
+ {
+ "build" : "/home/anas/suckless_utils/yo-dwm/cmake-build-debug",
+ "source" : "/home/anas/suckless_utils/yo-dwm"
+ },
+ "version" :
+ {
+ "major" : 1,
+ "minor" : 0
+ }
+}
diff --git a/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-47532c44014cf30e75ae.json b/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-47532c44014cf30e75ae.json
new file mode 100644
index 0000000..624b9e6
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/codemodel-v2-47532c44014cf30e75ae.json
@@ -0,0 +1,60 @@
+{
+ "configurations" :
+ [
+ {
+ "directories" :
+ [
+ {
+ "build" : ".",
+ "jsonFile" : "directory-.-Debug-f5ebdc15457944623624.json",
+ "minimumCMakeVersion" :
+ {
+ "string" : "3.23"
+ },
+ "projectIndex" : 0,
+ "source" : ".",
+ "targetIndexes" :
+ [
+ 0
+ ]
+ }
+ ],
+ "name" : "Debug",
+ "projects" :
+ [
+ {
+ "directoryIndexes" :
+ [
+ 0
+ ],
+ "name" : "yo_dwm",
+ "targetIndexes" :
+ [
+ 0
+ ]
+ }
+ ],
+ "targets" :
+ [
+ {
+ "directoryIndex" : 0,
+ "id" : "yo_dwm::@6890427a1f51a3e7e1df",
+ "jsonFile" : "target-yo_dwm-Debug-631731075c5f906219d9.json",
+ "name" : "yo_dwm",
+ "projectIndex" : 0
+ }
+ ]
+ }
+ ],
+ "kind" : "codemodel",
+ "paths" :
+ {
+ "build" : "/home/anas/suckless_utils/yo-dwm/cmake-build-debug",
+ "source" : "/home/anas/suckless_utils/yo-dwm"
+ },
+ "version" :
+ {
+ "major" : 2,
+ "minor" : 4
+ }
+}
diff --git a/cmake-build-debug/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json b/cmake-build-debug/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json
new file mode 100644
index 0000000..3a67af9
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/directory-.-Debug-f5ebdc15457944623624.json
@@ -0,0 +1,14 @@
+{
+ "backtraceGraph" :
+ {
+ "commands" : [],
+ "files" : [],
+ "nodes" : []
+ },
+ "installers" : [],
+ "paths" :
+ {
+ "build" : ".",
+ "source" : "."
+ }
+}
diff --git a/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-31T13-42-19-0799.json b/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-31T13-42-19-0799.json
new file mode 100644
index 0000000..9b26d34
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/index-2022-10-31T13-42-19-0799.json
@@ -0,0 +1,108 @@
+{
+ "cmake" :
+ {
+ "generator" :
+ {
+ "multiConfig" : false,
+ "name" : "Ninja"
+ },
+ "paths" :
+ {
+ "cmake" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/cmake",
+ "cpack" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/cpack",
+ "ctest" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/ctest",
+ "root" : "/home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23"
+ },
+ "version" :
+ {
+ "isDirty" : false,
+ "major" : 3,
+ "minor" : 23,
+ "patch" : 2,
+ "string" : "3.23.2",
+ "suffix" : ""
+ }
+ },
+ "objects" :
+ [
+ {
+ "jsonFile" : "codemodel-v2-47532c44014cf30e75ae.json",
+ "kind" : "codemodel",
+ "version" :
+ {
+ "major" : 2,
+ "minor" : 4
+ }
+ },
+ {
+ "jsonFile" : "cache-v2-313721cdec34a4e3a16d.json",
+ "kind" : "cache",
+ "version" :
+ {
+ "major" : 2,
+ "minor" : 0
+ }
+ },
+ {
+ "jsonFile" : "cmakeFiles-v1-ad9218d2c69b47be0e82.json",
+ "kind" : "cmakeFiles",
+ "version" :
+ {
+ "major" : 1,
+ "minor" : 0
+ }
+ },
+ {
+ "jsonFile" : "toolchains-v1-8cabd8cda47a6a3892f1.json",
+ "kind" : "toolchains",
+ "version" :
+ {
+ "major" : 1,
+ "minor" : 0
+ }
+ }
+ ],
+ "reply" :
+ {
+ "cache-v2" :
+ {
+ "jsonFile" : "cache-v2-313721cdec34a4e3a16d.json",
+ "kind" : "cache",
+ "version" :
+ {
+ "major" : 2,
+ "minor" : 0
+ }
+ },
+ "cmakeFiles-v1" :
+ {
+ "jsonFile" : "cmakeFiles-v1-ad9218d2c69b47be0e82.json",
+ "kind" : "cmakeFiles",
+ "version" :
+ {
+ "major" : 1,
+ "minor" : 0
+ }
+ },
+ "codemodel-v2" :
+ {
+ "jsonFile" : "codemodel-v2-47532c44014cf30e75ae.json",
+ "kind" : "codemodel",
+ "version" :
+ {
+ "major" : 2,
+ "minor" : 4
+ }
+ },
+ "toolchains-v1" :
+ {
+ "jsonFile" : "toolchains-v1-8cabd8cda47a6a3892f1.json",
+ "kind" : "toolchains",
+ "version" :
+ {
+ "major" : 1,
+ "minor" : 0
+ }
+ }
+ }
+}
diff --git a/cmake-build-debug/.cmake/api/v1/reply/target-yo_dwm-Debug-631731075c5f906219d9.json b/cmake-build-debug/.cmake/api/v1/reply/target-yo_dwm-Debug-631731075c5f906219d9.json
new file mode 100644
index 0000000..994b70f
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/target-yo_dwm-Debug-631731075c5f906219d9.json
@@ -0,0 +1,322 @@
+{
+ "artifacts" :
+ [
+ {
+ "path" : "yo_dwm"
+ }
+ ],
+ "backtrace" : 1,
+ "backtraceGraph" :
+ {
+ "commands" :
+ [
+ "add_executable",
+ "target_link_libraries",
+ "include_directories"
+ ],
+ "files" :
+ [
+ "CMakeLists.txt"
+ ],
+ "nodes" :
+ [
+ {
+ "file" : 0
+ },
+ {
+ "command" : 0,
+ "file" : 0,
+ "line" : 11,
+ "parent" : 0
+ },
+ {
+ "command" : 1,
+ "file" : 0,
+ "line" : 31,
+ "parent" : 0
+ },
+ {
+ "command" : 2,
+ "file" : 0,
+ "line" : 6,
+ "parent" : 0
+ },
+ {
+ "command" : 2,
+ "file" : 0,
+ "line" : 7,
+ "parent" : 0
+ },
+ {
+ "command" : 2,
+ "file" : 0,
+ "line" : 8,
+ "parent" : 0
+ },
+ {
+ "command" : 2,
+ "file" : 0,
+ "line" : 9,
+ "parent" : 0
+ }
+ ]
+ },
+ "compileGroups" :
+ [
+ {
+ "compileCommandFragments" :
+ [
+ {
+ "fragment" : "-g"
+ },
+ {
+ "fragment" : "-std=gnu11"
+ }
+ ],
+ "includes" :
+ [
+ {
+ "backtrace" : 3,
+ "path" : "/home/anas/suckless_utils/yo-dwm/."
+ },
+ {
+ "backtrace" : 4,
+ "path" : "/home/anas/suckless_utils/yo-dwm/src"
+ },
+ {
+ "backtrace" : 5,
+ "path" : "/home/anas/suckless_utils/yo-dwm/src/keys"
+ },
+ {
+ "backtrace" : 6,
+ "path" : "/home/anas/suckless_utils/yo-dwm/src/layouts"
+ }
+ ],
+ "language" : "C",
+ "languageStandard" :
+ {
+ "backtraces" :
+ [
+ 1
+ ],
+ "standard" : "11"
+ },
+ "sourceIndexes" :
+ [
+ 0,
+ 2,
+ 4,
+ 5,
+ 7,
+ 8,
+ 11,
+ 13,
+ 14,
+ 15,
+ 16,
+ 18
+ ]
+ }
+ ],
+ "id" : "yo_dwm::@6890427a1f51a3e7e1df",
+ "link" :
+ {
+ "commandFragments" :
+ [
+ {
+ "fragment" : "-g",
+ "role" : "flags"
+ },
+ {
+ "fragment" : "",
+ "role" : "flags"
+ },
+ {
+ "backtrace" : 2,
+ "fragment" : "-lX11",
+ "role" : "libraries"
+ },
+ {
+ "backtrace" : 2,
+ "fragment" : "-lXft",
+ "role" : "libraries"
+ },
+ {
+ "backtrace" : 2,
+ "fragment" : "-lXinerama",
+ "role" : "libraries"
+ }
+ ],
+ "language" : "C"
+ },
+ "name" : "yo_dwm",
+ "nameOnDisk" : "yo_dwm",
+ "paths" :
+ {
+ "build" : ".",
+ "source" : "."
+ },
+ "sourceGroups" :
+ [
+ {
+ "name" : "Source Files",
+ "sourceIndexes" :
+ [
+ 0,
+ 2,
+ 4,
+ 5,
+ 7,
+ 8,
+ 11,
+ 13,
+ 14,
+ 15,
+ 16,
+ 18
+ ]
+ },
+ {
+ "name" : "Header Files",
+ "sourceIndexes" :
+ [
+ 1,
+ 3,
+ 6,
+ 9,
+ 10,
+ 12,
+ 17,
+ 19,
+ 20,
+ 21
+ ]
+ }
+ ],
+ "sources" :
+ [
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/keys/keys.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/keys/keys.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/layouts/centeredmaster.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/layouts/centeredmaster.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/layouts/fibonacci.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/layouts/grid.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/layouts/layouts.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/layouts/monocle.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/layouts/tile.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/colors.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/config.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/drw.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/drw.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/dwm.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/movestack.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/transient.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/util.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/util.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "compileGroupIndex" : 0,
+ "path" : "src/keys/mouse.c",
+ "sourceGroupIndex" : 0
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/keys/mouse.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/keys/functions.h",
+ "sourceGroupIndex" : 1
+ },
+ {
+ "backtrace" : 1,
+ "path" : "src/dwm.h",
+ "sourceGroupIndex" : 1
+ }
+ ],
+ "type" : "EXECUTABLE"
+}
diff --git a/cmake-build-debug/.cmake/api/v1/reply/toolchains-v1-8cabd8cda47a6a3892f1.json b/cmake-build-debug/.cmake/api/v1/reply/toolchains-v1-8cabd8cda47a6a3892f1.json
new file mode 100644
index 0000000..ad3993f
--- /dev/null
+++ b/cmake-build-debug/.cmake/api/v1/reply/toolchains-v1-8cabd8cda47a6a3892f1.json
@@ -0,0 +1,50 @@
+{
+ "kind" : "toolchains",
+ "toolchains" :
+ [
+ {
+ "compiler" :
+ {
+ "id" : "GNU",
+ "implicit" :
+ {
+ "includeDirectories" :
+ [
+ "/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/include",
+ "/usr/local/include",
+ "/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0/include-fixed",
+ "/usr/include"
+ ],
+ "linkDirectories" :
+ [
+ "/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.0",
+ "/usr/lib",
+ "/lib"
+ ],
+ "linkFrameworkDirectories" : [],
+ "linkLibraries" :
+ [
+ "gcc",
+ "gcc_s",
+ "c",
+ "gcc",
+ "gcc_s"
+ ]
+ },
+ "path" : "/usr/bin/cc",
+ "version" : "12.2.0"
+ },
+ "language" : "C",
+ "sourceFileExtensions" :
+ [
+ "c",
+ "m"
+ ]
+ }
+ ],
+ "version" :
+ {
+ "major" : 1,
+ "minor" : 0
+ }
+}
diff --git a/cmake-build-debug/build.ninja b/cmake-build-debug/build.ninja
new file mode 100644
index 0000000..696b63d
--- /dev/null
+++ b/cmake-build-debug/build.ninja
@@ -0,0 +1,247 @@
+# CMAKE generated file: DO NOT EDIT!
+# Generated by "Ninja" Generator, CMake Version 3.23
+
+# This file contains all the build statements describing the
+# compilation DAG.
+
+# =============================================================================
+# Write statements declared in CMakeLists.txt:
+#
+# Which is the root file.
+# =============================================================================
+
+# =============================================================================
+# Project: yo_dwm
+# Configurations: Debug
+# =============================================================================
+
+#############################################
+# Minimal version of Ninja required by this file
+
+ninja_required_version = 1.5
+
+
+#############################################
+# Set configuration variable for custom commands.
+
+CONFIGURATION = Debug
+# =============================================================================
+# Include auxiliary files.
+
+
+#############################################
+# Include rules file.
+
+include CMakeFiles/rules.ninja
+
+# =============================================================================
+
+#############################################
+# Logical path to working directory; prefix for absolute paths.
+
+cmake_ninja_workdir = /home/anas/suckless_utils/yo-dwm/cmake-build-debug/
+# =============================================================================
+# Object build statements for EXECUTABLE target yo_dwm
+
+
+#############################################
+# Order-only phony target for yo_dwm
+
+build cmake_object_order_depends_target_yo_dwm: phony || CMakeFiles/yo_dwm.dir
+
+build CMakeFiles/yo_dwm.dir/src/keys/keys.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/keys/keys.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/keys/keys.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/keys
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/layouts/centeredmaster.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/layouts/centeredmaster.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/layouts/centeredmaster.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/layouts
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/layouts/fibonacci.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/layouts/fibonacci.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/layouts/fibonacci.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/layouts
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/layouts/grid.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/layouts/grid.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/layouts/grid.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/layouts
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/layouts/monocle.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/layouts/monocle.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/layouts/monocle.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/layouts
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/layouts/tile.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/layouts/tile.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/layouts/tile.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/layouts
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/drw.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/drw.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/drw.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/dwm.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/dwm.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/dwm.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/movestack.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/movestack.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/movestack.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/transient.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/transient.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/transient.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/util.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/util.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/util.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+build CMakeFiles/yo_dwm.dir/src/keys/mouse.c.o: C_COMPILER__yo_dwm_Debug /home/anas/suckless_utils/yo-dwm/src/keys/mouse.c || cmake_object_order_depends_target_yo_dwm
+ DEP_FILE = CMakeFiles/yo_dwm.dir/src/keys/mouse.c.o.d
+ FLAGS = -g -std=gnu11
+ INCLUDES = -I/home/anas/suckless_utils/yo-dwm/. -I/home/anas/suckless_utils/yo-dwm/src -I/home/anas/suckless_utils/yo-dwm/src/keys -I/home/anas/suckless_utils/yo-dwm/src/layouts
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ OBJECT_FILE_DIR = CMakeFiles/yo_dwm.dir/src/keys
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_PDB = yo_dwm.pdb
+
+
+# =============================================================================
+# Link build statements for EXECUTABLE target yo_dwm
+
+
+#############################################
+# Link the executable yo_dwm
+
+build yo_dwm: C_EXECUTABLE_LINKER__yo_dwm_Debug CMakeFiles/yo_dwm.dir/src/keys/keys.c.o CMakeFiles/yo_dwm.dir/src/layouts/centeredmaster.c.o CMakeFiles/yo_dwm.dir/src/layouts/fibonacci.c.o CMakeFiles/yo_dwm.dir/src/layouts/grid.c.o CMakeFiles/yo_dwm.dir/src/layouts/monocle.c.o CMakeFiles/yo_dwm.dir/src/layouts/tile.c.o CMakeFiles/yo_dwm.dir/src/drw.c.o CMakeFiles/yo_dwm.dir/src/dwm.c.o CMakeFiles/yo_dwm.dir/src/movestack.c.o CMakeFiles/yo_dwm.dir/src/transient.c.o CMakeFiles/yo_dwm.dir/src/util.c.o CMakeFiles/yo_dwm.dir/src/keys/mouse.c.o
+ FLAGS = -g
+ LINK_LIBRARIES = -lX11 -lXft -lXinerama
+ OBJECT_DIR = CMakeFiles/yo_dwm.dir
+ POST_BUILD = :
+ PRE_LINK = :
+ TARGET_COMPILE_PDB = CMakeFiles/yo_dwm.dir/
+ TARGET_FILE = yo_dwm
+ TARGET_PDB = yo_dwm.pdb
+
+
+#############################################
+# Utility command for edit_cache
+
+build CMakeFiles/edit_cache.util: CUSTOM_COMMAND
+ COMMAND = cd /home/anas/suckless_utils/yo-dwm/cmake-build-debug && /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/ccmake -S/home/anas/suckless_utils/yo-dwm -B/home/anas/suckless_utils/yo-dwm/cmake-build-debug
+ DESC = Running CMake cache editor...
+ pool = console
+ restat = 1
+
+build edit_cache: phony CMakeFiles/edit_cache.util
+
+
+#############################################
+# Utility command for rebuild_cache
+
+build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND
+ COMMAND = cd /home/anas/suckless_utils/yo-dwm/cmake-build-debug && /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/bin/cmake --regenerate-during-build -S/home/anas/suckless_utils/yo-dwm -B/home/anas/suckless_utils/yo-dwm/cmake-build-debug
+ DESC = Running CMake to regenerate build system...
+ pool = console
+ restat = 1
+
+build rebuild_cache: phony CMakeFiles/rebuild_cache.util
+
+# =============================================================================
+# Target aliases.
+
+# =============================================================================
+# Folder targets.
+
+# =============================================================================
+
+#############################################
+# Folder: /home/anas/suckless_utils/yo-dwm/cmake-build-debug
+
+build all: phony yo_dwm
+
+# =============================================================================
+# Built-in targets
+
+
+#############################################
+# Re-run CMake if any of its inputs changed.
+
+build build.ninja: RERUN_CMAKE | ../CMakeLists.txt /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompiler.cmake.in /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompilerABI.c /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCInformation.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCommonLanguageInclude.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCompilerIdDetection.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompileFeatures.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompilerABI.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompilerId.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineSystem.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeFindBinUtils.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeGenericSystem.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeInitializeConfigs.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeLanguageInformation.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseImplicitIncludeInfo.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseImplicitLinkInfo.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseLibraryArchitecture.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystem.cmake.in /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystemSpecificInformation.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystemSpecificInitialize.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCompilerCommon.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ADSP-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ARMCC-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ARMClang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/AppleClang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Borland-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Bruce-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/CMakeCommonCompilerMacros.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompilerInternal.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Compaq-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Cray-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Embarcadero-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Fujitsu-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GHS-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-C.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-FindBinUtils.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/HP-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IAR-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Intel-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/LCC-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/MSVC-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/NVHPC-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/NVIDIA-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/PGI-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/PathScale-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SCO-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SDCC-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SunPro-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/TI-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Watcom-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/XL-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/XLClang-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/zOS-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Internal/FeatureTesting.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux-GNU-C.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux-GNU.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.23.2/CMakeCCompiler.cmake CMakeFiles/3.23.2/CMakeSystem.cmake
+ pool = console
+
+
+#############################################
+# A missing CMake input file is not an error.
+
+build ../CMakeLists.txt /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompiler.cmake.in /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCCompilerABI.c /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCInformation.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCommonLanguageInclude.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeCompilerIdDetection.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompileFeatures.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompilerABI.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineCompilerId.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeDetermineSystem.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeFindBinUtils.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeGenericSystem.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeInitializeConfigs.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeLanguageInformation.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseImplicitIncludeInfo.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseImplicitLinkInfo.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeParseLibraryArchitecture.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystem.cmake.in /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystemSpecificInformation.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeSystemSpecificInitialize.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/CMakeTestCompilerCommon.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ADSP-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ARMCC-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/ARMClang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/AppleClang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Borland-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Bruce-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/CMakeCommonCompilerMacros.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Clang-DetermineCompilerInternal.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Compaq-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Cray-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Embarcadero-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Fujitsu-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GHS-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-C.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU-FindBinUtils.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/GNU.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/HP-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IAR-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Intel-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/LCC-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/MSVC-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/NVHPC-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/NVIDIA-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/PGI-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/PathScale-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SCO-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SDCC-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/SunPro-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/TI-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/Watcom-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/XL-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/XLClang-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Compiler/zOS-C-DetermineCompiler.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Internal/FeatureTesting.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux-GNU-C.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux-GNU.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/Linux.cmake /home/anas/.local/share/JetBrains/Toolbox/apps/CLion/ch-1/222.4345.21/bin/cmake/linux/share/cmake-3.23/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.23.2/CMakeCCompiler.cmake CMakeFiles/3.23.2/CMakeSystem.cmake: phony
+
+
+#############################################
+# Clean all the built files.
+
+build clean: CLEAN
+
+
+#############################################
+# Print all primary targets available.
+
+build help: HELP
+
+
+#############################################
+# Make the all target the default.
+
+default all
diff --git a/config.def.h b/config.def.h
deleted file mode 100644
index 061ad66..0000000
--- a/config.def.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-
-/* appearance */
-static const unsigned int borderpx = 1; /* border pixel of windows */
-static const unsigned int snap = 32; /* snap pixel */
-static const int showbar = 1; /* 0 means no bar */
-static const int topbar = 1; /* 0 means bottom bar */
-static const char *fonts[] = { "monospace:size=10" };
-static const char dmenufont[] = "monospace:size=10";
-static const char col_gray1[] = "#222222";
-static const char col_gray2[] = "#444444";
-static const char col_gray3[] = "#bbbbbb";
-static const char col_gray4[] = "#eeeeee";
-static const char col_cyan[] = "#005577";
-static const char *colors[][3] = {
- /* fg bg border */
- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
-};
-
-/* tagging */
-static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
-
-static const Rule rules[] = {
- /* xprop(1):
- * WM_CLASS(STRING) = instance, class
- * WM_NAME(STRING) = title
- */
- /* class instance title tags mask isfloating monitor */
- { "Gimp", NULL, NULL, 0, 1, -1 },
- { "Firefox", NULL, NULL, 1 << 8, 0, -1 },
-};
-
-/* layout(s) */
-static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
-static const int nmaster = 1; /* number of clients in master area */
-static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
-static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
-
-static const Layout layouts[] = {
- /* symbol arrange function */
- { "[]=", tile }, /* first entry is default */
- { "><>", NULL }, /* no layout function means floating behavior */
- { "[M]", monocle },
-};
-
-/* key definitions */
-#define MODKEY Mod1Mask
-#define TAGKEYS(KEY,TAG) \
- { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
- { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
-
-/* helper for spawning shell commands in the pre dwm-5.0 fashion */
-#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
-/* commands */
-static const char *dmenucmd[] = { "dmenu_run", "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
-static const char *termcmd[] = { "st", NULL };
-
-static const Key keys[] = {
- /* modifier key function argument */
- { MODKEY, XK_p, spawn, {.v = dmenucmd } },
- { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
- { MODKEY, XK_b, togglebar, {0} },
- { MODKEY, XK_j, focusstack, {.i = +1 } },
- { MODKEY, XK_k, focusstack, {.i = -1 } },
- { MODKEY, XK_i, incnmaster, {.i = +1 } },
- { MODKEY, XK_d, incnmaster, {.i = -1 } },
- { MODKEY, XK_h, setmfact, {.f = -0.05} },
- { MODKEY, XK_l, setmfact, {.f = +0.05} },
- { MODKEY, XK_Return, zoom, {0} },
- { MODKEY, XK_Tab, view, {0} },
- { MODKEY|ShiftMask, XK_c, killclient, {0} },
- { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
- { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
- { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
- { MODKEY, XK_space, setlayout, {0} },
- { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
- { MODKEY, XK_0, view, {.ui = ~0 } },
- { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },
- { MODKEY, XK_comma, focusmon, {.i = -1 } },
- { MODKEY, XK_period, focusmon, {.i = +1 } },
- { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
- { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } },
- TAGKEYS( XK_1, 0)
- TAGKEYS( XK_2, 1)
- TAGKEYS( XK_3, 2)
- TAGKEYS( XK_4, 3)
- TAGKEYS( XK_5, 4)
- TAGKEYS( XK_6, 5)
- TAGKEYS( XK_7, 6)
- TAGKEYS( XK_8, 7)
- TAGKEYS( XK_9, 8)
- { MODKEY|ShiftMask, XK_q, quit, {0} },
-};
-
-/* button definitions */
-/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
-static const Button buttons[] = {
- /* click event mask button function argument */
- { ClkLtSymbol, 0, Button1, setlayout, {0} },
- { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
- { ClkWinTitle, 0, Button2, zoom, {0} },
- { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
- { ClkClientWin, MODKEY, Button1, movemouse, {0} },
- { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
- { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
- { ClkTagBar, 0, Button1, view, {0} },
- { ClkTagBar, 0, Button3, toggleview, {0} },
- { ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
-};
-
diff --git a/src/colors.h b/src/colors.h
deleted file mode 100644
index 4d61eed..0000000
--- a/src/colors.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef colors_H
-#define colors_H
-
-// #define wal "/home/anas/.cache/wal/colors-wal-dwm.h"
-
-// #if __has_include(wal)
-// #include wal
-// #else
-static const char norm_fg[] = "#e4ded4";
-static const char norm_bg[] = "#191b1f";
-static const char norm_border[] = "#282c34";
-
-static const char sel_fg[] = "#e4ded4";
-static const char sel_bg[] = "#3f2124";
-static const char sel_border[] = "#e4ded4";
-
-static const char urg_fg[] = "#e4ded4";
-static const char urg_bg[] = "#313036";
-static const char urg_border[] = "#312e36";
-
-static const char *colors[][3] = {
- /* fg bg border */
- [SchemeNorm] = { norm_fg, norm_bg, norm_border }, // unfocused wins
- [SchemeSel] = { sel_fg, sel_bg, sel_border }, // the focused win
- [SchemeUrg] = { urg_fg, urg_bg, urg_border },
-};
-// #endif
-
-#endif // !colors.h
diff --git a/src/colors/defualt.h b/src/colors/defualt.h
new file mode 100644
index 0000000..a90bd08
--- /dev/null
+++ b/src/colors/defualt.h
@@ -0,0 +1,23 @@
+#ifndef colors_H
+#define colors_H
+
+static const char norm_fg[] = "#e4ded4";
+static const char norm_bg[] = "#191b1f";
+static const char norm_border[] = "#282c34";
+
+static const char sel_fg[] = "#e4ded4";
+static const char sel_bg[] = "#3f2124";
+static const char sel_border[] = "#e4ded4";
+
+static const char urg_fg[] = "#e4ded4";
+static const char urg_bg[] = "#313036";
+static const char urg_border[] = "#312e36";
+
+static const char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = {norm_fg, norm_bg, norm_border}, // unfocused wins
+ [SchemeSel] = {sel_fg, sel_bg, sel_border}, // the focused win
+ [SchemeUrg] = {urg_fg, urg_bg, urg_border},
+};
+
+#endif // colors_H
diff --git a/src/colors/dracula.h b/src/colors/dracula.h
new file mode 100644
index 0000000..ec213e2
--- /dev/null
+++ b/src/colors/dracula.h
@@ -0,0 +1,28 @@
+//
+// Created by anas on 10/31/22.
+//
+// inspired from: https://github.com/0x73hahd/dwm-config/blob/dev/source/colors/dracula.h
+
+#ifndef DRACULA_H
+#define DRACULA_H
+
+static const char norm_fg[] = "#ff79c6";
+static const char norm_bg[] = "#282a36";
+static const char norm_border[] = "#282a36";
+
+static const char sel_fg[] = "#ffb86c";
+static const char sel_bg[] = "#282a36";
+static const char sel_border[] = "#ffb86c";
+
+static const char urg_fg[] = "#e4ded4";
+static const char urg_bg[] = "#313036";
+static const char urg_border[] = "#312e36";
+
+static const char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = {norm_fg, norm_bg, norm_border}, // unfocused wins
+ [SchemeSel] = {sel_fg, sel_bg, sel_border}, // the focused win
+ [SchemeUrg] = {urg_fg, urg_bg, urg_border},
+};
+
+#endif //DRACULA_H
diff --git a/src/config.def.h b/src/config.def.h
deleted file mode 100644
index 31ce881..0000000
--- a/src/config.def.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* See LICENSE file for copyright and license details. */
-
-/* def */
-#define WEBBROWSER "google-chrome-stable"
-#define TERMINAL "alacritty"
-#define SCREENSHOT "spectacle"
-#define GUI_FILEMANAGER "pcmanfm"
-
-/* appearance */
-static const unsigned int borderpx = 1; /* border pixel of windows */
-static const unsigned int gappx = 3; /* gaps size between windows */
-static const unsigned int snap = 32; /* snap pixel */
-static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
-static const unsigned int systrayonleft = 0; /* 0: systray in the right corner, >0: systray on left of status text */
-static const unsigned int systrayspacing = 2; /* systray spacing */
-static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
-static const int showsystray = 1; /* 0 means no systray */
-static const int showbar = 1; /* 0 means no bar */
-static const int topbar = 1; /* 0 means bottom bar */
-static const char *fonts[] = { "monospace:size=11", "Noto Color Emoji:size=11", "Nerd Font Mono:weight=bold:size=15:antialias=true:hinting=true" };
-static const char dmenufont[] = "monospace:size=11";
-static const char col_1[] = "#282c34"; // Background color of bar
-static const char col_2[] = "#282c34"; // Background color of unfocused windows border
-static const char col_3[] = "#d7d7d7";
-static const char col_4[] = "#018858"; // Background color of focused windows border and tags (main color acent)
-static const char *colors[][3] = {
- /* fg bg border */
- [SchemeNorm] = { col_3, col_1, col_2 },
- [SchemeSel] = { col_3, col_4, col_4 },
-};
-// Autostart programs
-static const char *const autostart[] = {
- // Start my build of slstatus
- "slstatus", NULL,
- // Keyboard layouts switch (requires setxkbmap)
- "setxkbmap", "-model", "pc101", "-layout", "us,ar", "-variant", ",,", "-option", "grp:win_space_toggle", NULL,
- // "xkbset", "exp", "=sticky", "-twokey", "-latchlock", NULL, // sticky keys
- "/bin/stickykeys", NULL, // sticky keys script
- "picom", NULL, // Start compositor , for transparency
- "nitrogen", "--restore", NULL, // Restores the wallpaper
- "nm-applet", NULL, // Start the network manger
- "copyq", NULL, // clipboard manger
- NULL /* terminate */
- };
-
-/* tagging */
-// static const char *tags[] = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
-static const char *tags[] = { "", "", "", "", "", "", "", "", "" };
-
-static const Rule rules[] = {
- /* xprop(1):
- * WM_CLASS(STRING) = instance, class
- * WM_NAME(STRING) = title
- */
- /* class instance title tags mask isfloating monitor */
- { "Gimp", NULL, NULL, 0, 1, -1 },
- { WEBBROWSER, NULL, NULL, 1 << 8, 0, -1 },
-};
-
-/* layout(s) */
-static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
-static const int nmaster = 1; /* number of clients in master area */
-static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
-static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
-
-#include "layouts/layouts.h"
-#include "movestack.c"
-#include "keys/keys.h"
diff --git a/src/config.h b/src/config.h
index 1df7171..0d7cc5d 100644
--- a/src/config.h
+++ b/src/config.h
@@ -1,66 +1,78 @@
-/* See LICENSE file for copyright and license details. */
-
+#ifndef CONFIG_H
+#define CONFIG_H
/* def */
-#define WEBBROWSER "firefox-developer-edition"
-#define TERMINAL "kitty"
+#define TERMINAL "kitty"
/* appearance */
-static const unsigned int borderpx = 1; /* border pixel of windows */
-static const unsigned int gappx = 3; /* gaps size between windows */
-static const unsigned int snap = 32; /* snap pixel */
+static const unsigned int borderpx = 1; /* border pixel of windows */
+static const unsigned int gappx = 3; /* gaps size between windows */
+static const unsigned int snap = 32; /* snap pixel */
static const unsigned int systraypinning = 0; /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
-static const unsigned int systrayonleft = 0; /* 0: systray in the right corner, >0: systray on left of status text */
+static const unsigned int systrayonleft = 0; /* 0: systray in the right corner, >0: systray on left of status text */
static const unsigned int systrayspacing = 2; /* systray spacing */
static const int systraypinningfailfirst = 1; /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
-static const int showsystray = 1; /* 0 means no systray */
-static const int showbar = 1; /* 0 means no bar */
-static const int topbar = 1; /* 0 means bottom bar */
-static const char *fonts[] = { "monospace:size=7", "Noto Color Emoji:size=8", "Nerd Font Mono:size=16:antialias=true:hinting=true" };
-static const char dmenufont[] = "monospace:size=8";
+static const int showsystray = 1; /* 0 means no systray */
+static const int showbar = 1; /* 0 means no bar */
+static const int topbar = 1; /* 0 means bottom bar */
+static const char *fonts[] = {"monospace:size=7", "Noto Color Emoji:size=8",
+ "Nerd Font Mono:size=16:antialias=true:hinting=true"};
+static const char dmenufont[] = "monospace:size=8";
-#include "colors.h"
+#ifndef STDDEF_H
+
+#include
+
+#endif
+
+#include "colors/defualt.h"
// Autostart programs
static const char *const autostart[] = {
- // Start my build of slstatus
- "slstatus", NULL,
- // Keyboard layouts switch (requires setxkbmap)
- "setxkbmap", "-model", "pc101", "-layout", "us,ar", "-variant", ",,", "-option", "grp:win_space_toggle", NULL,
- // "xkbset", "exp", "=sticky", "-twokey", "-latchlock", NULL, // sticky keys
- "/bin/stickykeys", NULL, // sticky keys script
- // "picom", NULL, // Start compositor , for transparency
- "nitrogen", "--restore", NULL, // Restores the wallpaper
- "nm-applet", NULL, // Start the network manger
- "copyq", NULL, // clipboard manger
- NULL /* terminate */
- };
+ // Start my build of slstatus
+ "slstatus", NULL,
+ // Keyboard layouts switch (requires setxkbmap)
+ "setxkbmap", "-model", "pc101", "-layout", "us,ar", "-variant", ",,", "-option", "grp:win_space_toggle", NULL,
+ // "xkbset", "exp", "=sticky", "-twokey", "-latchlock", NULL, // sticky keys
+ "/bin/stickykeys", NULL, // sticky keys script
+ // "picom", NULL, // Start compositor , for transparency
+ "nitrogen", "--restore", NULL, // Restores the wallpaper
+ "nm-applet", NULL, // Start the network manger
+ "copyq", NULL, // clipboard manger
+ NULL /* terminate */
+};
/* tagging */
// static const char *tags[] = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
// static const char *tags[] = { "", "", "", "", "", "", "", "", "" };
-static const char *tags[] = { "www", "dev", "sys", "chat", "img", "vid", "mus", "vbox", "gfx", ";" };
+static const char *tags[] = {"www", "dev", "sys", "chat", "img", "vid", "mus", "vbox", "gfx", ";"};
static const Rule rules[] = {
- /* xprop(1):
- * WM_CLASS(STRING) = instance, class
- * WM_NAME(STRING) = title
- */
- /* class instance title tags mask isfloating monitor */
- { "Gimp", NULL, NULL, 9, 1, -1 },
- // { WEBBROWSER, NULL, NULL, 1 << 8, 0, -1 },
- { "Tor Browser", NULL, NULL, 10, 0, -1 },
- { "keepassxc", NULL, NULL, 10, 0, -1 },
- { "firefoxdeveloperedition", NULL, NULL, 1 << 6, 0, -1 },
- { "discord", NULL, NULL, 4 << 5, 0, -1 },
-
+ /* xprop(1):
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask isfloating monitor */
+ {"Gimp", NULL, NULL, 9 << 8, 1, -1}, // 0100000000
+ {"Tor Browser", "Navigator", NULL, 9 << 9, 0, -1}, // Open it in tag 10 (9 in array)
+ {"KeePassXC", "keepassxc", NULL, 9 << 9, 0, -1}, // 1000000000
+ {"firefoxdeveloperedition", "Navigator", NULL, 1 << 0, 0, -1}, // 0000000001
+ {"discord", NULL, NULL, 4 << 1, 0, -1}, // 0000001000
+ {"Virt-manager", "virt-manager", NULL, 9 << 7, 0, -1}, // 0010000000
+ {"VirtualBox Manager", "VirtualBox Manager", NULL, 9 << 7, 0, -1}, // 0010000000
};
+/* helper for spawning shell commands in the pre dwm-5.0 fashion */
+#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+/* commands */
+static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+static const char *dmenucmd[] = {"dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", norm_bg,
+ "-nf", norm_fg, "-sb", sel_bg, "-sf", sel_fg, NULL};
+static const char *termcmd[] = {TERMINAL, NULL};
/* layout(s) */
-static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
-static const int nmaster = 1; /* number of clients in master area */
+static const float mfact = 0.55f; /* factor of master area size [0.05..0.95] */
+static const int nmaster = 1; /* number of clients in master area */
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
-#include "layouts/layouts.h"
-#include "movestack.c"
-#include "keys/keys.h"
+#endif // CONFIG_H
diff --git a/src/drw.c b/src/drw.c
index a58a2b4..6e2f619 100644
--- a/src/drw.c
+++ b/src/drw.c
@@ -11,440 +11,421 @@
#define UTF_INVALID 0xFFFD
#define UTF_SIZ 4
-static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
+static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0xE0, 0xF0};
static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0xF0, 0xF8};
-static const long utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800, 0x10000};
+static const long utfmin[UTF_SIZ + 1] = {0, 0, 0x80, 0x800, 0x10000};
static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF, 0x10FFFF};
static long
-utf8decodebyte(const char c, size_t *i)
-{
- for (*i = 0; *i < (UTF_SIZ + 1); ++(*i))
- if (((unsigned char)c & utfmask[*i]) == utfbyte[*i])
- return (unsigned char)c & ~utfmask[*i];
- return 0;
+utf8decodebyte(const char c, size_t *i) {
+ for (*i = 0; *i < (UTF_SIZ + 1); ++(*i))
+ if (((unsigned char) c & utfmask[*i]) == utfbyte[*i])
+ return (unsigned char) c & ~utfmask[*i];
+ return 0;
}
static size_t
-utf8validate(long *u, size_t i)
-{
- if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF))
- *u = UTF_INVALID;
- for (i = 1; *u > utfmax[i]; ++i)
- ;
- return i;
+utf8validate(long *u, size_t i) {
+ if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0xDFFF))
+ *u = UTF_INVALID;
+ for (i = 1; *u > utfmax[i]; ++i);
+ return i;
}
static size_t
-utf8decode(const char *c, long *u, size_t clen)
-{
- size_t i, j, len, type;
- long udecoded;
+utf8decode(const char *c, long *u, size_t clen) {
+ size_t i, j, len, type;
+ long udecoded;
- *u = UTF_INVALID;
- if (!clen)
- return 0;
- udecoded = utf8decodebyte(c[0], &len);
- if (!BETWEEN(len, 1, UTF_SIZ))
- return 1;
- for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
- udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type);
- if (type)
- return j;
- }
- if (j < len)
- return 0;
- *u = udecoded;
- utf8validate(u, len);
+ *u = UTF_INVALID;
+ if (!clen)
+ return 0;
+ udecoded = utf8decodebyte(c[0], &len);
+ if (!BETWEEN(len, 1, UTF_SIZ))
+ return 1;
+ for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
+ udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type);
+ if (type)
+ return j;
+ }
+ if (j < len)
+ return 0;
+ *u = udecoded;
+ utf8validate(u, len);
- return len;
+ return len;
}
Drw *
-drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h)
-{
- Drw *drw = ecalloc(1, sizeof(Drw));
+drw_create(Display *dpy, int screen, Window root, unsigned int w, unsigned int h) {
+ Drw *drw = ecalloc(1, sizeof(Drw));
- drw->dpy = dpy;
- drw->screen = screen;
- drw->root = root;
- drw->w = w;
- drw->h = h;
- drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
- drw->gc = XCreateGC(dpy, root, 0, NULL);
- XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
+ drw->dpy = dpy;
+ drw->screen = screen;
+ drw->root = root;
+ drw->w = w;
+ drw->h = h;
+ drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy, screen));
+ drw->gc = XCreateGC(dpy, root, 0, NULL);
+ XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMiter);
- return drw;
+ return drw;
}
void
-drw_resize(Drw *drw, unsigned int w, unsigned int h)
-{
- if (!drw)
- return;
+drw_resize(Drw *drw, unsigned int w, unsigned int h) {
+ if (!drw)
+ return;
- drw->w = w;
- drw->h = h;
- if (drw->drawable)
- XFreePixmap(drw->dpy, drw->drawable);
- drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
+ drw->w = w;
+ drw->h = h;
+ if (drw->drawable)
+ XFreePixmap(drw->dpy, drw->drawable);
+ drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, DefaultDepth(drw->dpy, drw->screen));
}
void
-drw_free(Drw *drw)
-{
- XFreePixmap(drw->dpy, drw->drawable);
- XFreeGC(drw->dpy, drw->gc);
- drw_fontset_free(drw->fonts);
- free(drw);
+drw_free(Drw *drw) {
+ XFreePixmap(drw->dpy, drw->drawable);
+ XFreeGC(drw->dpy, drw->gc);
+ drw_fontset_free(drw->fonts);
+ free(drw);
}
/* This function is an implementation detail. Library users should use
* drw_fontset_create instead.
*/
static Fnt *
-xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
-{
- Fnt *font;
- XftFont *xfont = NULL;
- FcPattern *pattern = NULL;
+xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern) {
+ Fnt *font;
+ XftFont *xfont = NULL;
+ FcPattern *pattern = NULL;
- if (fontname) {
- /* Using the pattern found at font->xfont->pattern does not yield the
- * same substitution results as using the pattern returned by
- * FcNameParse; using the latter results in the desired fallback
- * behaviour whereas the former just results in missing-character
- * rectangles being drawn, at least with some fonts. */
- if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) {
- fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname);
- return NULL;
- }
- if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
- fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname);
- XftFontClose(drw->dpy, xfont);
- return NULL;
- }
- } else if (fontpattern) {
- if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) {
- fprintf(stderr, "error, cannot load font from pattern.\n");
- return NULL;
- }
- } else {
- die("no font specified.");
- }
+ if (fontname) {
+ /* Using the pattern found at font->xfont->pattern does not yield the
+ * same substitution results as using the pattern returned by
+ * FcNameParse; using the latter results in the desired fallback
+ * behaviour whereas the former just results in missing-character
+ * rectangles being drawn, at least with some fonts. */
+ if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) {
+ fprintf(stderr, "error, cannot load font from name: '%s'\n", fontname);
+ return NULL;
+ }
+ if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
+ fprintf(stderr, "error, cannot parse font name to pattern: '%s'\n", fontname);
+ XftFontClose(drw->dpy, xfont);
+ return NULL;
+ }
+ } else if (fontpattern) {
+ if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) {
+ fprintf(stderr, "error, cannot load font from pattern.\n");
+ return NULL;
+ }
+ } else {
+ die("no font specified.");
+ }
- font = ecalloc(1, sizeof(Fnt));
- font->xfont = xfont;
- font->pattern = pattern;
- font->h = xfont->ascent + xfont->descent;
- font->dpy = drw->dpy;
+ font = ecalloc(1, sizeof(Fnt));
+ font->xfont = xfont;
+ font->pattern = pattern;
+ font->h = xfont->ascent + xfont->descent;
+ font->dpy = drw->dpy;
- return font;
+ return font;
}
static void
-xfont_free(Fnt *font)
-{
- if (!font)
- return;
- if (font->pattern)
- FcPatternDestroy(font->pattern);
- XftFontClose(font->dpy, font->xfont);
- free(font);
+xfont_free(Fnt *font) {
+ if (!font)
+ return;
+ if (font->pattern)
+ FcPatternDestroy(font->pattern);
+ XftFontClose(font->dpy, font->xfont);
+ free(font);
}
-Fnt*
-drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
-{
- Fnt *cur, *ret = NULL;
- size_t i;
+Fnt *
+drw_fontset_create(Drw *drw, const char *fonts[], size_t fontcount) {
+ Fnt *cur, *ret = NULL;
+ size_t i;
- if (!drw || !fonts)
- return NULL;
+ if (!drw || !fonts)
+ return NULL;
- for (i = 1; i <= fontcount; i++) {
- if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) {
- cur->next = ret;
- ret = cur;
- }
- }
- return (drw->fonts = ret);
+ for (i = 1; i <= fontcount; i++) {
+ if ((cur = xfont_create(drw, fonts[fontcount - i], NULL))) {
+ cur->next = ret;
+ ret = cur;
+ }
+ }
+ return (drw->fonts = ret);
}
void
-drw_fontset_free(Fnt *font)
-{
- if (font) {
- drw_fontset_free(font->next);
- xfont_free(font);
- }
+drw_fontset_free(Fnt *font) {
+ if (font) {
+ drw_fontset_free(font->next);
+ xfont_free(font);
+ }
}
void
-drw_clr_create(Drw *drw, Clr *dest, const char *clrname)
-{
- if (!drw || !dest || !clrname)
- return;
+drw_clr_create(Drw *drw, Clr *dest, const char *clrname) {
+ if (!drw || !dest || !clrname)
+ return;
- if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
- DefaultColormap(drw->dpy, drw->screen),
- clrname, dest))
- die("error, cannot allocate color '%s'", clrname);
+ if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
+ DefaultColormap(drw->dpy, drw->screen),
+ clrname, dest))
+ die("error, cannot allocate color '%s'", clrname);
}
/* Wrapper to create color schemes. The caller has to call free(3) on the
* returned color scheme when done using it. */
Clr *
-drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
-{
- size_t i;
- Clr *ret;
+drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) {
+ size_t i;
+ Clr *ret;
- /* need at least two colors for a scheme */
- if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
- return NULL;
+ /* need at least two colors for a scheme */
+ if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
+ return NULL;
- for (i = 0; i < clrcount; i++)
- drw_clr_create(drw, &ret[i], clrnames[i]);
- return ret;
+ for (i = 0; i < clrcount; i++)
+ drw_clr_create(drw, &ret[i], clrnames[i]);
+ return ret;
}
void
-drw_setfontset(Drw *drw, Fnt *set)
-{
- if (drw)
- drw->fonts = set;
+drw_setfontset(Drw *drw, Fnt *set) {
+ if (drw)
+ drw->fonts = set;
}
void
-drw_setscheme(Drw *drw, Clr *scm)
-{
- if (drw)
- drw->scheme = scm;
+drw_setscheme(Drw *drw, Clr *scm) {
+ if (drw)
+ drw->scheme = scm;
}
void
-drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert)
-{
- if (!drw || !drw->scheme)
- return;
- XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel);
- if (filled)
- XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
- else
- XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
+drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert) {
+ if (!drw || !drw->scheme)
+ return;
+ XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel);
+ if (filled)
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
+ else
+ XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1);
}
int
-drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert)
-{
- int i, ty, ellipsis_x = 0;
- unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
- XftDraw *d = NULL;
- Fnt *usedfont, *curfont, *nextfont;
- int utf8strlen, utf8charlen, render = x || y || w || h;
- long utf8codepoint = 0;
- const char *utf8str;
- FcCharSet *fccharset;
- FcPattern *fcpattern;
- FcPattern *match;
- XftResult result;
- int charexists = 0, overflow = 0;
- /* keep track of a couple codepoints for which we have no match. */
- enum { nomatches_len = 64 };
- static struct { long codepoint[nomatches_len]; unsigned int idx; } nomatches;
- static unsigned int ellipsis_width = 0;
+drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert) {
+ int i, ty, ellipsis_x = 0;
+ unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
+ XftDraw *d = NULL;
+ Fnt *usedfont, *curfont, *nextfont;
+ int utf8strlen, utf8charlen, render = x || y || w || h;
+ long utf8codepoint = 0;
+ const char *utf8str;
+ FcCharSet *fccharset;
+ FcPattern *fcpattern;
+ FcPattern *match;
+ XftResult result;
+ int charexists = 0, overflow = 0;
+ /* keep track of a couple codepoints for which we have no match. */
+ enum {
+ nomatches_len = 64
+ };
+ static struct {
+ long codepoint[nomatches_len];
+ unsigned int idx;
+ } nomatches;
+ static unsigned int ellipsis_width = 0;
- if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
- return 0;
+ if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->fonts)
+ return 0;
- if (!render) {
- w = invert ? invert : ~invert;
- } else {
- XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
- XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
- d = XftDrawCreate(drw->dpy, drw->drawable,
- DefaultVisual(drw->dpy, drw->screen),
- DefaultColormap(drw->dpy, drw->screen));
- x += lpad;
- w -= lpad;
- }
+ if (!render) {
+ w = invert ? invert : ~invert;
+ } else {
+ XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg : ColBg].pixel);
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
+ d = XftDrawCreate(drw->dpy, drw->drawable,
+ DefaultVisual(drw->dpy, drw->screen),
+ DefaultColormap(drw->dpy, drw->screen));
+ x += lpad;
+ w -= lpad;
+ }
- usedfont = drw->fonts;
- if (!ellipsis_width && render)
- ellipsis_width = drw_fontset_getwidth(drw, "...");
- while (1) {
- ew = ellipsis_len = utf8strlen = 0;
- utf8str = text;
- nextfont = NULL;
- while (*text) {
- utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ);
- for (curfont = drw->fonts; curfont; curfont = curfont->next) {
- charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
- if (charexists) {
- drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL);
- if (ew + ellipsis_width <= w) {
- /* keep track where the ellipsis still fits */
- ellipsis_x = x + ew;
- ellipsis_w = w - ew;
- ellipsis_len = utf8strlen;
- }
+ usedfont = drw->fonts;
+ if (!ellipsis_width && render)
+ ellipsis_width = drw_fontset_getwidth(drw, "...");
+ while (1) {
+ ew = ellipsis_len = utf8strlen = 0;
+ utf8str = text;
+ nextfont = NULL;
+ while (*text) {
+ utf8charlen = utf8decode(text, &utf8codepoint, UTF_SIZ);
+ for (curfont = drw->fonts; curfont; curfont = curfont->next) {
+ charexists = charexists || XftCharExists(drw->dpy, curfont->xfont, utf8codepoint);
+ if (charexists) {
+ drw_font_getexts(curfont, text, utf8charlen, &tmpw, NULL);
+ if (ew + ellipsis_width <= w) {
+ /* keep track where the ellipsis still fits */
+ ellipsis_x = x + ew;
+ ellipsis_w = w - ew;
+ ellipsis_len = utf8strlen;
+ }
- if (ew + tmpw > w) {
- overflow = 1;
- /* called from drw_fontset_getwidth_clamp():
- * it wants the width AFTER the overflow
- */
- if (!render)
- x += tmpw;
- else
- utf8strlen = ellipsis_len;
- } else if (curfont == usedfont) {
- utf8strlen += utf8charlen;
- text += utf8charlen;
- ew += tmpw;
- } else {
- nextfont = curfont;
- }
- break;
- }
- }
+ if (ew + tmpw > w) {
+ overflow = 1;
+ /* called from drw_fontset_getwidth_clamp():
+ * it wants the width AFTER the overflow
+ */
+ if (!render)
+ x += tmpw;
+ else
+ utf8strlen = ellipsis_len;
+ } else if (curfont == usedfont) {
+ utf8strlen += utf8charlen;
+ text += utf8charlen;
+ ew += tmpw;
+ } else {
+ nextfont = curfont;
+ }
+ break;
+ }
+ }
- if (overflow || !charexists || nextfont)
- break;
- else
- charexists = 0;
- }
+ if (overflow || !charexists || nextfont)
+ break;
+ else
+ charexists = 0;
+ }
- if (utf8strlen) {
- if (render) {
- ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
- XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
- usedfont->xfont, x, ty, (XftChar8 *)utf8str, utf8strlen);
- }
- x += ew;
- w -= ew;
- }
- if (render && overflow)
- drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert);
+ if (utf8strlen) {
+ if (render) {
+ ty = y + (h - usedfont->h) / 2 + usedfont->xfont->ascent;
+ XftDrawStringUtf8(d, &drw->scheme[invert ? ColBg : ColFg],
+ usedfont->xfont, x, ty, (XftChar8 *) utf8str, utf8strlen);
+ }
+ x += ew;
+ w -= ew;
+ }
+ if (render && overflow)
+ drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, "...", invert);
- if (!*text || overflow) {
- break;
- } else if (nextfont) {
- charexists = 0;
- usedfont = nextfont;
- } else {
- /* Regardless of whether or not a fallback font is found, the
- * character must be drawn. */
- charexists = 1;
+ if (!*text || overflow) {
+ break;
+ } else if (nextfont) {
+ charexists = 0;
+ usedfont = nextfont;
+ } else {
+ /* Regardless of whether or not a fallback font is found, the
+ * character must be drawn. */
+ charexists = 1;
- for (i = 0; i < nomatches_len; ++i) {
- /* avoid calling XftFontMatch if we know we won't find a match */
- if (utf8codepoint == nomatches.codepoint[i])
- goto no_match;
- }
+ for (i = 0; i < nomatches_len; ++i) {
+ /* avoid calling XftFontMatch if we know we won't find a match */
+ if (utf8codepoint == nomatches.codepoint[i])
+ goto no_match;
+ }
- fccharset = FcCharSetCreate();
- FcCharSetAddChar(fccharset, utf8codepoint);
+ fccharset = FcCharSetCreate();
+ FcCharSetAddChar(fccharset, utf8codepoint);
- if (!drw->fonts->pattern) {
- /* Refer to the comment in xfont_create for more information. */
- die("the first font in the cache must be loaded from a font string.");
- }
+ if (!drw->fonts->pattern) {
+ /* Refer to the comment in xfont_create for more information. */
+ die("the first font in the cache must be loaded from a font string.");
+ }
- fcpattern = FcPatternDuplicate(drw->fonts->pattern);
- FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
- FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
+ fcpattern = FcPatternDuplicate(drw->fonts->pattern);
+ FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
+ FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue);
- FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
- FcDefaultSubstitute(fcpattern);
- match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result);
+ FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
+ FcDefaultSubstitute(fcpattern);
+ match = XftFontMatch(drw->dpy, drw->screen, fcpattern, &result);
- FcCharSetDestroy(fccharset);
- FcPatternDestroy(fcpattern);
+ FcCharSetDestroy(fccharset);
+ FcPatternDestroy(fcpattern);
- if (match) {
- usedfont = xfont_create(drw, NULL, match);
- if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
- for (curfont = drw->fonts; curfont->next; curfont = curfont->next)
- ; /* NOP */
- curfont->next = usedfont;
- } else {
- xfont_free(usedfont);
- nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint;
-no_match:
- usedfont = drw->fonts;
- }
- }
- }
- }
- if (d)
- XftDrawDestroy(d);
+ if (match) {
+ usedfont = xfont_create(drw, NULL, match);
+ if (usedfont && XftCharExists(drw->dpy, usedfont->xfont, utf8codepoint)) {
+ for (curfont = drw->fonts; curfont->next; curfont = curfont->next); /* NOP */
+ curfont->next = usedfont;
+ } else {
+ xfont_free(usedfont);
+ nomatches.codepoint[++nomatches.idx % nomatches_len] = utf8codepoint;
+ no_match:
+ usedfont = drw->fonts;
+ }
+ }
+ }
+ }
+ if (d)
+ XftDrawDestroy(d);
- return x + (render ? w : 0);
+ return x + (render ? w : 0);
}
void
-drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h)
-{
- if (!drw)
- return;
+drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h) {
+ if (!drw)
+ return;
- XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y);
- XSync(drw->dpy, False);
+ XCopyArea(drw->dpy, drw->drawable, win, drw->gc, x, y, w, h, x, y);
+ XSync(drw->dpy, False);
}
unsigned int
-drw_fontset_getwidth(Drw *drw, const char *text)
-{
- if (!drw || !drw->fonts || !text)
- return 0;
- return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
+drw_fontset_getwidth(Drw *drw, const char *text) {
+ if (!drw || !drw->fonts || !text)
+ return 0;
+ return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
unsigned int
-drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
-{
- unsigned int tmp = 0;
- if (drw && drw->fonts && text && n)
- tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
- return MIN(n, tmp);
+drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n) {
+ unsigned int tmp = 0;
+ if (drw && drw->fonts && text && n)
+ tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
+ return MIN(n, tmp);
}
void
-drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h)
-{
- XGlyphInfo ext;
+drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h) {
+ XGlyphInfo ext;
- if (!font || !text)
- return;
+ if (!font || !text)
+ return;
- XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, len, &ext);
- if (w)
- *w = ext.xOff;
- if (h)
- *h = font->h;
+ XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *) text, len, &ext);
+ if (w)
+ *w = ext.xOff;
+ if (h)
+ *h = font->h;
}
Cur *
-drw_cur_create(Drw *drw, int shape)
-{
- Cur *cur;
+drw_cur_create(Drw *drw, int shape) {
+ Cur *cur;
- if (!drw || !(cur = ecalloc(1, sizeof(Cur))))
- return NULL;
+ if (!drw || !(cur = ecalloc(1, sizeof(Cur))))
+ return NULL;
- cur->cursor = XCreateFontCursor(drw->dpy, shape);
+ cur->cursor = XCreateFontCursor(drw->dpy, shape);
- return cur;
+ return cur;
}
void
-drw_cur_free(Drw *drw, Cur *cursor)
-{
- if (!cursor)
- return;
+drw_cur_free(Drw *drw, Cur *cursor) {
+ if (!cursor)
+ return;
- XFreeCursor(drw->dpy, cursor->cursor);
- free(cursor);
+ XFreeCursor(drw->dpy, cursor->cursor);
+ free(cursor);
}
diff --git a/src/drw.h b/src/drw.h
index 6471431..f9f7dd4 100644
--- a/src/drw.h
+++ b/src/drw.h
@@ -1,57 +1,69 @@
/* See LICENSE file for copyright and license details. */
typedef struct {
- Cursor cursor;
+ Cursor cursor;
} Cur;
typedef struct Fnt {
- Display *dpy;
- unsigned int h;
- XftFont *xfont;
- FcPattern *pattern;
- struct Fnt *next;
+ Display *dpy;
+ unsigned int h;
+ XftFont *xfont;
+ FcPattern *pattern;
+ struct Fnt *next;
} Fnt;
-enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
+enum {
+ ColFg, ColBg, ColBorder
+}; /* Clr scheme index */
typedef XftColor Clr;
typedef struct {
- unsigned int w, h;
- Display *dpy;
- int screen;
- Window root;
- Drawable drawable;
- GC gc;
- Clr *scheme;
- Fnt *fonts;
+ unsigned int w, h;
+ Display *dpy;
+ int screen;
+ Window root;
+ Drawable drawable;
+ GC gc;
+ Clr *scheme;
+ Fnt *fonts;
} Drw;
/* Drawable abstraction */
Drw *drw_create(Display *dpy, int screen, Window win, unsigned int w, unsigned int h);
+
void drw_resize(Drw *drw, unsigned int w, unsigned int h);
+
void drw_free(Drw *drw);
/* Fnt abstraction */
-Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
-void drw_fontset_free(Fnt* set);
+Fnt *drw_fontset_create(Drw *drw, const char *fonts[], size_t fontcount);
+
+void drw_fontset_free(Fnt *set);
+
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
+
unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n);
+
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *w, unsigned int *h);
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
+
Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);
+
void drw_cur_free(Drw *drw, Cur *cursor);
/* Drawing context manipulation */
void drw_setfontset(Drw *drw, Fnt *set);
+
void drw_setscheme(Drw *drw, Clr *scm);
/* Drawing functions */
void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled, int invert);
+
int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned int lpad, const char *text, int invert);
/* Map functions */
diff --git a/src/dwm.c b/src/dwm.c
index 68d37c5..547a4c0 100644
--- a/src/dwm.c
+++ b/src/dwm.c
@@ -31,32 +31,22 @@
#include
#include
#include
-#include
#include
#include
#include
#include
+
#ifdef XINERAMA
#include
#endif /* XINERAMA */
+
#include
#include "drw.h"
#include "util.h"
+#include "dwm.h"
/* macros */
-#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
-#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
-#define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \
- * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy)))
-#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]) || C->issticky)
-#define LENGTH(X) (sizeof X / sizeof X[0])
-#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
-#define WIDTH(X) ((X)->w + 2 * (X)->bw)
-#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
-#define TAGMASK ((1 << LENGTH(tags)) - 1)
-#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
-
#define SYSTEM_TRAY_REQUEST_DOCK 0
/* XEMBED messages */
#define XEMBED_EMBEDDED_NOTIFY 0
@@ -68,208 +58,6 @@
#define XEMBED_WINDOW_DEACTIVATE 2
#define VERSION_MAJOR 0
#define VERSION_MINOR 0
-#define XEMBED_EMBEDDED_VERSION (VERSION_MAJOR << 16) | VERSION_MINOR
-
-/* enums */
-enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
-enum { SchemeNorm, SchemeSel, SchemeUrg }; /* color schemes */
-enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
- NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz,
- NetWMFullscreen, NetActiveWindow, NetWMWindowType,
- NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
-enum { Manager, Xembed, XembedInfo, XLast }; /* Xembed atoms */
-enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
-enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
- ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
-
-typedef union {
- int i;
- unsigned int ui;
- float f;
- const void *v;
-} Arg;
-
-typedef struct {
- unsigned int click;
- unsigned int mask;
- unsigned int button;
- void (*func)(const Arg *arg);
- const Arg arg;
-} Button;
-
-typedef struct Monitor Monitor;
-typedef struct Client Client;
-struct Client {
- char name[256];
- float mina, maxa;
- int x, y, w, h;
- int oldx, oldy, oldw, oldh;
- int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid;
- int bw, oldbw;
- unsigned int tags;
- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, issticky;
- Client *next;
- Client *snext;
- Monitor *mon;
- Window win;
-};
-
-typedef struct {
- unsigned int mod;
- KeySym chain;
- KeySym keysym;
- void (*func)(const Arg *);
- const Arg arg;
-} Key;
-
-typedef struct {
- const char *symbol;
- void (*arrange)(Monitor *);
-} Layout;
-
-typedef struct Pertag Pertag;
-struct Monitor {
- char ltsymbol[16];
- float mfact;
- int nmaster;
- int num;
- int by; /* bar geometry */
- int mx, my, mw, mh; /* screen size */
- int wx, wy, ww, wh; /* window area */
- unsigned int seltags;
- unsigned int sellt;
- unsigned int tagset[2];
- int showbar;
- int topbar;
- Client *clients;
- Client *sel;
- Client *stack;
- Monitor *next;
- Window barwin;
- const Layout *lt[2];
- Pertag *pertag;
-};
-
-typedef struct {
- const char *class;
- const char *instance;
- const char *title;
- unsigned int tags;
- int isfloating;
- int monitor;
-} Rule;
-
-typedef struct Systray Systray;
-struct Systray {
- Window win;
- Client *icons;
-};
-
-/* function declarations */
-static void applyrules(Client *c);
-static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
-static void arrange(Monitor *m);
-static void arrangemon(Monitor *m);
-static void attach(Client *c);
-static void attachstack(Client *c);
-static void buttonpress(XEvent *e);
-static void checkotherwm(void);
-static void cleanup(void);
-static void cleanupmon(Monitor *mon);
-static void clientmessage(XEvent *e);
-static void configure(Client *c);
-static void configurenotify(XEvent *e);
-static void configurerequest(XEvent *e);
-static Monitor *createmon(void);
-static void destroynotify(XEvent *e);
-static void detach(Client *c);
-static void detachstack(Client *c);
-static Monitor *dirtomon(int dir);
-static void drawbar(Monitor *m);
-static void drawbars(void);
-static void enternotify(XEvent *e);
-static void expose(XEvent *e);
-static void focus(Client *c);
-static void focusin(XEvent *e);
-static void focusmon(const Arg *arg);
-static void focusstack(const Arg *arg);
-static Atom getatomprop(Client *c, Atom prop);
-static int getrootptr(int *x, int *y);
-static long getstate(Window w);
-static unsigned int getsystraywidth();
-static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
-static void grabbuttons(Client *c, int focused);
-static void grabkeys(void);
-static void incnmaster(const Arg *arg);
-static void keypress(XEvent *e);
-static void killclient(const Arg *arg);
-static void manage(Window w, XWindowAttributes *wa);
-static void mappingnotify(XEvent *e);
-static void maprequest(XEvent *e);
-static void monocle(Monitor *m);
-static void motionnotify(XEvent *e);
-static void movemouse(const Arg *arg);
-static Client *nexttiled(Client *c);
-static void pop(Client *);
-static void propertynotify(XEvent *e);
-static void quit(const Arg *arg);
-static Monitor *recttomon(int x, int y, int w, int h);
-static void removesystrayicon(Client *i);
-static void resize(Client *c, int x, int y, int w, int h, int interact);
-static void resizebarwin(Monitor *m);
-static void resizeclient(Client *c, int x, int y, int w, int h);
-static void resizemouse(const Arg *arg);
-static void resizerequest(XEvent *e);
-static void restack(Monitor *m);
-static void run(void);
-static void scan(void);
-static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4);
-static void sendmon(Client *c, Monitor *m);
-static void setclientstate(Client *c, long state);
-static void setfocus(Client *c);
-static void setfullscreen(Client *c, int fullscreen);
-static void fullscreen(const Arg *arg);
-static void setlayout(const Arg *arg);
-static void setmfact(const Arg *arg);
-static void setup(void);
-static void seturgent(Client *c, int urg);
-static void showhide(Client *c);
-static void sigchld(int unused);
-static void spawn(const Arg *arg);
-static Monitor *systraytomon(Monitor *m);
-static void tag(const Arg *arg);
-static void tagmon(const Arg *arg);
-static void tile(Monitor *);
-static void togglebar(const Arg *arg);
-static void togglefloating(const Arg *arg);
-static void togglesticky(const Arg *arg);
-static void toggletag(const Arg *arg);
-static void toggleview(const Arg *arg);
-static void unfocus(Client *c, int setfocus);
-static void unmanage(Client *c, int destroyed);
-static void unmapnotify(XEvent *e);
-static void updatebarpos(Monitor *m);
-static void updatebars(void);
-static void updateclientlist(void);
-static int updategeom(void);
-static void updatenumlockmask(void);
-static void updatesizehints(Client *c);
-static void updatestatus(void);
-static void updatesystray(void);
-static void updatesystrayicongeom(Client *i, int w, int h);
-static void updatesystrayiconstate(Client *i, XPropertyEvent *ev);
-static void updatetitle(Client *c);
-static void updatewindowtype(Client *c);
-static void updatewmhints(Client *c);
-static void view(const Arg *arg);
-static Client *wintoclient(Window w);
-static Monitor *wintomon(Window w);
-static Client *wintosystrayicon(Window w);
-static int xerror(Display *dpy, XErrorEvent *ee);
-static int xerrordummy(Display *dpy, XErrorEvent *ee);
-static int xerrorstart(Display *dpy, XErrorEvent *ee);
-static void zoom(const Arg *arg);
-static void autostart_exec(void);
/* variables */
static Systray *systray = NULL;
@@ -280,24 +68,27 @@ static int sw, sh; /* X display screen geometry width, height */
static int bh, blw = 0; /* bar geometry */
static int lrpad; /* sum of left and right padding for text */
static int (*xerrorxlib)(Display *, XErrorEvent *);
+
static unsigned int numlockmask = 0;
-static void (*handler[LASTEvent]) (XEvent *) = {
- [ButtonPress] = buttonpress,
- [ClientMessage] = clientmessage,
- [ConfigureRequest] = configurerequest,
- [ConfigureNotify] = configurenotify,
- [DestroyNotify] = destroynotify,
- [EnterNotify] = enternotify,
- [Expose] = expose,
- [FocusIn] = focusin,
- [KeyPress] = keypress,
- [MappingNotify] = mappingnotify,
- [MapRequest] = maprequest,
- [MotionNotify] = motionnotify,
- [PropertyNotify] = propertynotify,
- [ResizeRequest] = resizerequest,
- [UnmapNotify] = unmapnotify
+
+static void (*handler[LASTEvent])(XEvent *) = {
+ [ButtonPress] = buttonpress,
+ [ClientMessage] = clientmessage,
+ [ConfigureRequest] = configurerequest,
+ [ConfigureNotify] = configurenotify,
+ [DestroyNotify] = destroynotify,
+ [EnterNotify] = enternotify,
+ [Expose] = expose,
+ [FocusIn] = focusin,
+ [KeyPress] = keypress,
+ [MappingNotify] = mappingnotify,
+ [MapRequest] = maprequest,
+ [MotionNotify] = motionnotify,
+ [PropertyNotify] = propertynotify,
+ [ResizeRequest] = resizerequest,
+ [UnmapNotify] = unmapnotify
};
+
static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
static int running = 1;
static Cur *cursor[CurLast];
@@ -310,18 +101,28 @@ static KeySym keychain = -1;
/* configuration, allows nested code to access above variables */
#include "config.h"
+/* Layouts */
+#include "layouts/layouts.h"
+/* Movestack patch */
+#include "movestack.c"
+/* Keys bindings */
+#include "keys/keys.h"
+/* Mouse bindings */
+#include "keys/mouse.h"
struct Pertag {
- unsigned int curtag, prevtag; /* current and previous tag */
- int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */
- float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */
- unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */
- const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */
- int showbars[LENGTH(tags) + 1]; /* display bar for the current tag */
+ unsigned int curtag, prevtag; /* current and previous tag */
+ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */
+ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */
+ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */
+ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */
+ int showbars[LENGTH(tags) + 1]; /* display bar for the current tag */
};
/* compile-time check if all tags fit into an unsigned int bit array. */
-struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
+struct NumTags {
+ char limitexceeded[LENGTH(tags) > 31 ? -1 : 1];
+};
/* dwm will keep pid's of processes from autostart array and kill them at quit */
static pid_t *autostart_pids;
@@ -330,2339 +131,2252 @@ static size_t autostart_len;
/* execute command from autostart array */
static void
autostart_exec() {
- const char *const *p;
- size_t i = 0;
+ const char *const *p;
+ size_t i = 0;
- /* count entries */
- for (p = autostart; *p; autostart_len++, p++)
- while (*++p);
+ /* count entries */
+ for (p = autostart; *p; autostart_len++, p++)
+ while (*++p);
- autostart_pids = malloc(autostart_len * sizeof(pid_t));
- for (p = autostart; *p; i++, p++) {
- if ((autostart_pids[i] = fork()) == 0) {
- setsid();
- execvp(*p, (char *const *)p);
- fprintf(stderr, "dwm: execvp %s\n", *p);
- perror(" failed");
- _exit(EXIT_FAILURE);
- }
- /* skip arguments */
- while (*++p);
- }
+ autostart_pids = malloc(autostart_len * sizeof(pid_t));
+ for (p = autostart; *p; i++, p++) {
+ if ((autostart_pids[i] = fork()) == 0) {
+ setsid();
+ execvp(*p, (char *const *) p);
+ fprintf(stderr, "dwm: execvp %s\n", *p);
+ perror(" failed");
+ _exit(EXIT_FAILURE);
+ }
+ /* skip arguments */
+ while (*++p);
+ }
}
/* function implementations */
void
-applyrules(Client *c)
-{
- const char *class, *instance;
- unsigned int i;
- const Rule *r;
- Monitor *m;
- XClassHint ch = { NULL, NULL };
+applyrules(Client *c) {
+ const char *class, *instance;
+ unsigned int i;
+ const Rule *r;
+ Monitor *m;
+ XClassHint ch = {NULL, NULL};
- /* rule matching */
- c->isfloating = 0;
- c->tags = 0;
- XGetClassHint(dpy, c->win, &ch);
- class = ch.res_class ? ch.res_class : broken;
- instance = ch.res_name ? ch.res_name : broken;
+ /* rule matching */
+ c->isfloating = 0;
+ c->tags = 0;
+ XGetClassHint(dpy, c->win, &ch);
+ class = ch.res_class ? ch.res_class : broken;
+ instance = ch.res_name ? ch.res_name : broken;
- for (i = 0; i < LENGTH(rules); i++) {
- r = &rules[i];
- if ((!r->title || strstr(c->name, r->title))
- && (!r->class || strstr(class, r->class))
- && (!r->instance || strstr(instance, r->instance)))
- {
- c->isfloating = r->isfloating;
- c->tags |= r->tags;
- for (m = mons; m && m->num != r->monitor; m = m->next);
- if (m)
- c->mon = m;
- }
- }
- if (ch.res_class)
- XFree(ch.res_class);
- if (ch.res_name)
- XFree(ch.res_name);
- c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
+ for (i = 0; i < LENGTH(rules); i++) {
+ r = &rules[i];
+ if ((!r->title || strstr(c->name, r->title))
+ && (!r->class || strstr(class, r->class))
+ && (!r->instance || strstr(instance, r->instance))) {
+ c->isfloating = r->isfloating;
+ c->tags |= r->tags;
+ for (m = mons; m && m->num != r->monitor; m = m->next);
+ if (m)
+ c->mon = m;
+ }
+ }
+ if (ch.res_class)
+ XFree(ch.res_class);
+ if (ch.res_name)
+ XFree(ch.res_name);
+ c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
}
int
-applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
-{
- int baseismin;
- Monitor *m = c->mon;
+applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) {
+ int baseismin;
+ Monitor *m = c->mon;
- /* set minimum possible */
- *w = MAX(1, *w);
- *h = MAX(1, *h);
- if (interact) {
- if (*x > sw)
- *x = sw - WIDTH(c);
- if (*y > sh)
- *y = sh - HEIGHT(c);
- if (*x + *w + 2 * c->bw < 0)
- *x = 0;
- if (*y + *h + 2 * c->bw < 0)
- *y = 0;
- } else {
- if (*x >= m->wx + m->ww)
- *x = m->wx + m->ww - WIDTH(c);
- if (*y >= m->wy + m->wh)
- *y = m->wy + m->wh - HEIGHT(c);
- if (*x + *w + 2 * c->bw <= m->wx)
- *x = m->wx;
- if (*y + *h + 2 * c->bw <= m->wy)
- *y = m->wy;
- }
- if (*h < bh)
- *h = bh;
- if (*w < bh)
- *w = bh;
- if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
- if (!c->hintsvalid)
- updatesizehints(c);
- /* see last two sentences in ICCCM 4.1.2.3 */
- baseismin = c->basew == c->minw && c->baseh == c->minh;
- if (!baseismin) { /* temporarily remove base dimensions */
- *w -= c->basew;
- *h -= c->baseh;
- }
- /* adjust for aspect limits */
- if (c->mina > 0 && c->maxa > 0) {
- if (c->maxa < (float)*w / *h)
- *w = *h * c->maxa + 0.5;
- else if (c->mina < (float)*h / *w)
- *h = *w * c->mina + 0.5;
- }
- if (baseismin) { /* increment calculation requires this */
- *w -= c->basew;
- *h -= c->baseh;
- }
- /* adjust for increment value */
- if (c->incw)
- *w -= *w % c->incw;
- if (c->inch)
- *h -= *h % c->inch;
- /* restore base dimensions */
- *w = MAX(*w + c->basew, c->minw);
- *h = MAX(*h + c->baseh, c->minh);
- if (c->maxw)
- *w = MIN(*w, c->maxw);
- if (c->maxh)
- *h = MIN(*h, c->maxh);
- }
- return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
+ /* set minimum possible */
+ *w = MAX(1, *w);
+ *h = MAX(1, *h);
+ if (interact) {
+ if (*x > sw)
+ *x = sw - WIDTH(c);
+ if (*y > sh)
+ *y = sh - HEIGHT(c);
+ if (*x + *w + 2 * c->bw < 0)
+ *x = 0;
+ if (*y + *h + 2 * c->bw < 0)
+ *y = 0;
+ } else {
+ if (*x >= m->wx + m->ww)
+ *x = m->wx + m->ww - WIDTH(c);
+ if (*y >= m->wy + m->wh)
+ *y = m->wy + m->wh - HEIGHT(c);
+ if (*x + *w + 2 * c->bw <= m->wx)
+ *x = m->wx;
+ if (*y + *h + 2 * c->bw <= m->wy)
+ *y = m->wy;
+ }
+ if (*h < bh)
+ *h = bh;
+ if (*w < bh)
+ *w = bh;
+ if (resizehints || c->isfloating || !c->mon->lt[c->mon->sellt]->arrange) {
+ if (!c->hintsvalid)
+ updatesizehints(c);
+ /* see last two sentences in ICCCM 4.1.2.3 */
+ baseismin = c->basew == c->minw && c->baseh == c->minh;
+ if (!baseismin) { /* temporarily remove base dimensions */
+ *w -= c->basew;
+ *h -= c->baseh;
+ }
+ /* adjust for aspect limits */
+ if (c->mina > 0 && c->maxa > 0) {
+ if (c->maxa < (float) *w / *h)
+ *w = *h * c->maxa + 0.5;
+ else if (c->mina < (float) *h / *w)
+ *h = *w * c->mina + 0.5;
+ }
+ if (baseismin) { /* increment calculation requires this */
+ *w -= c->basew;
+ *h -= c->baseh;
+ }
+ /* adjust for increment value */
+ if (c->incw)
+ *w -= *w % c->incw;
+ if (c->inch)
+ *h -= *h % c->inch;
+ /* restore base dimensions */
+ *w = MAX(*w + c->basew, c->minw);
+ *h = MAX(*h + c->baseh, c->minh);
+ if (c->maxw)
+ *w = MIN(*w, c->maxw);
+ if (c->maxh)
+ *h = MIN(*h, c->maxh);
+ }
+ return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
}
void
-arrange(Monitor *m)
-{
- if (m)
- showhide(m->stack);
- else for (m = mons; m; m = m->next)
- showhide(m->stack);
- if (m) {
- arrangemon(m);
- restack(m);
- } else for (m = mons; m; m = m->next)
- arrangemon(m);
+arrange(Monitor *m) {
+ if (m)
+ showhide(m->stack);
+ else
+ for (m = mons; m; m = m->next)
+ showhide(m->stack);
+ if (m) {
+ arrangemon(m);
+ restack(m);
+ } else
+ for (m = mons; m; m = m->next)
+ arrangemon(m);
}
void
-arrangemon(Monitor *m)
-{
- strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
- if (m->lt[m->sellt]->arrange)
- m->lt[m->sellt]->arrange(m);
+arrangemon(Monitor *m) {
+ strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
+ if (m->lt[m->sellt]->arrange)
+ m->lt[m->sellt]->arrange(m);
}
void
-attach(Client *c)
-{
- c->next = c->mon->clients;
- c->mon->clients = c;
+attach(Client *c) {
+ c->next = c->mon->clients;
+ c->mon->clients = c;
}
void
-attachstack(Client *c)
-{
- c->snext = c->mon->stack;
- c->mon->stack = c;
+attachstack(Client *c) {
+ c->snext = c->mon->stack;
+ c->mon->stack = c;
}
void
-buttonpress(XEvent *e)
-{
- unsigned int i, x, click;
- Arg arg = {0};
- Client *c;
- Monitor *m;
- XButtonPressedEvent *ev = &e->xbutton;
+buttonpress(XEvent *e) {
+ unsigned int i, x, click;
+ Arg arg = {0};
+ Client *c;
+ Monitor *m;
+ XButtonPressedEvent *ev = &e->xbutton;
- click = ClkRootWin;
- /* focus monitor if necessary */
- if ((m = wintomon(ev->window)) && m != selmon) {
- unfocus(selmon->sel, 1);
- selmon = m;
- focus(NULL);
- }
- if (ev->window == selmon->barwin) {
- i = x = 0;
- do
- x += TEXTW(tags[i]);
- while (ev->x >= x && ++i < LENGTH(tags));
- if (i < LENGTH(tags)) {
- click = ClkTagBar;
- arg.ui = 1 << i;
- } else if (ev->x < x + blw)
- click = ClkLtSymbol;
- else if (ev->x > selmon->ww - (int)TEXTW(stext) - getsystraywidth())
- click = ClkStatusText;
- else
- click = ClkWinTitle;
- } else if ((c = wintoclient(ev->window))) {
- focus(c);
- restack(selmon);
- XAllowEvents(dpy, ReplayPointer, CurrentTime);
- click = ClkClientWin;
- }
- for (i = 0; i < LENGTH(buttons); i++)
- if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
- && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
- buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
+ click = ClkRootWin;
+ /* focus monitor if necessary */
+ if ((m = wintomon(ev->window)) && m != selmon) {
+ unfocus(selmon->sel, 1);
+ selmon = m;
+ focus(NULL);
+ }
+ if (ev->window == selmon->barwin) {
+ i = x = 0;
+ do
+ x += TEXTW(tags[i]);
+ while (ev->x >= x && ++i < LENGTH(tags));
+ if (i < LENGTH(tags)) {
+ click = ClkTagBar;
+ arg.ui = 1 << i;
+ } else if (ev->x < x + blw)
+ click = ClkLtSymbol;
+ else if (ev->x > selmon->ww - (int) TEXTW(stext) - getsystraywidth())
+ click = ClkStatusText;
+ else
+ click = ClkWinTitle;
+ } else if ((c = wintoclient(ev->window))) {
+ focus(c);
+ restack(selmon);
+ XAllowEvents(dpy, ReplayPointer, CurrentTime);
+ click = ClkClientWin;
+ }
+ for (i = 0; i < LENGTH(buttons); i++)
+ if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
+ && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
+ buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
}
void
-checkotherwm(void)
-{
- xerrorxlib = XSetErrorHandler(xerrorstart);
- /* this causes an error if some other window manager is running */
- XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
- XSync(dpy, False);
- XSetErrorHandler(xerror);
- XSync(dpy, False);
+checkotherwm(void) {
+ xerrorxlib = XSetErrorHandler(xerrorstart);
+ /* this causes an error if some other window manager is running */
+ XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask);
+ XSync(dpy, False);
+ XSetErrorHandler(xerror);
+ XSync(dpy, False);
}
void
-cleanup(void)
-{
- Arg a = {.ui = ~0};
- Layout foo = { "", NULL };
- Monitor *m;
- size_t i;
+cleanup(void) {
+ Arg a = {.ui = ~0};
+ Layout foo = {"", NULL};
+ Monitor *m;
+ size_t i;
- view(&a);
- selmon->lt[selmon->sellt] = &foo;
- for (m = mons; m; m = m->next)
- while (m->stack)
- unmanage(m->stack, 0);
- XUngrabKey(dpy, AnyKey, AnyModifier, root);
- while (mons)
- cleanupmon(mons);
+ view(&a);
+ selmon->lt[selmon->sellt] = &foo;
+ for (m = mons; m; m = m->next)
+ while (m->stack)
+ unmanage(m->stack, 0);
+ XUngrabKey(dpy, AnyKey, AnyModifier, root);
+ while (mons)
+ cleanupmon(mons);
- if (showsystray) {
- XUnmapWindow(dpy, systray->win);
- XDestroyWindow(dpy, systray->win);
- free(systray);
- }
+ if (showsystray) {
+ XUnmapWindow(dpy, systray->win);
+ XDestroyWindow(dpy, systray->win);
+ free(systray);
+ }
for (i = 0; i < CurLast; i++)
- drw_cur_free(drw, cursor[i]);
- for (i = 0; i < LENGTH(colors); i++)
- free(scheme[i]);
- free(scheme);
- XDestroyWindow(dpy, wmcheckwin);
- drw_free(drw);
- XSync(dpy, False);
- XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
- XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+ drw_cur_free(drw, cursor[i]);
+ for (i = 0; i < LENGTH(colors); i++)
+ free(scheme[i]);
+ free(scheme);
+ XDestroyWindow(dpy, wmcheckwin);
+ drw_free(drw);
+ XSync(dpy, False);
+ XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
}
void
-cleanupmon(Monitor *mon)
-{
- Monitor *m;
+cleanupmon(Monitor *mon) {
+ Monitor *m;
- if (mon == mons)
- mons = mons->next;
- else {
- for (m = mons; m && m->next != mon; m = m->next);
- m->next = mon->next;
- }
- XUnmapWindow(dpy, mon->barwin);
- XDestroyWindow(dpy, mon->barwin);
- free(mon);
+ if (mon == mons)
+ mons = mons->next;
+ else {
+ for (m = mons; m && m->next != mon; m = m->next);
+ m->next = mon->next;
+ }
+ XUnmapWindow(dpy, mon->barwin);
+ XDestroyWindow(dpy, mon->barwin);
+ free(mon);
}
void
-clientmessage(XEvent *e)
-{
- XWindowAttributes wa;
- XSetWindowAttributes swa;
- XClientMessageEvent *cme = &e->xclient;
- Client *c = wintoclient(cme->window);
+clientmessage(XEvent *e) {
+ XWindowAttributes wa;
+ XSetWindowAttributes swa;
+ XClientMessageEvent *cme = &e->xclient;
+ Client *c = wintoclient(cme->window);
- if (showsystray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) {
- /* add systray icons */
- if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) {
- if (!(c = (Client *)calloc(1, sizeof(Client))))
- die("fatal: could not malloc() %u bytes\n", sizeof(Client));
- if (!(c->win = cme->data.l[2])) {
- free(c);
- return;
- }
- c->mon = selmon;
- c->next = systray->icons;
- systray->icons = c;
- if (!XGetWindowAttributes(dpy, c->win, &wa)) {
- /* use sane defaults */
- wa.width = bh;
- wa.height = bh;
- wa.border_width = 0;
- }
- c->x = c->oldx = c->y = c->oldy = 0;
- c->w = c->oldw = wa.width;
- c->h = c->oldh = wa.height;
- c->oldbw = wa.border_width;
- c->bw = 0;
- c->isfloating = True;
- /* reuse tags field as mapped status */
- c->tags = 1;
- updatesizehints(c);
- updatesystrayicongeom(c, wa.width, wa.height);
- XAddToSaveSet(dpy, c->win);
- XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask);
- XReparentWindow(dpy, c->win, systray->win, 0, 0);
- /* use parents background color */
- swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
- XChangeWindowAttributes(dpy, c->win, CWBackPixel, &swa);
- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_EMBEDDED_NOTIFY, 0 , systray->win, XEMBED_EMBEDDED_VERSION);
- /* FIXME not sure if I have to send these events, too */
- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_FOCUS_IN, 0 , systray->win, XEMBED_EMBEDDED_VERSION);
- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0 , systray->win, XEMBED_EMBEDDED_VERSION);
- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_MODALITY_ON, 0 , systray->win, XEMBED_EMBEDDED_VERSION);
- XSync(dpy, False);
- resizebarwin(selmon);
- updatesystray();
- setclientstate(c, NormalState);
- }
- return;
- }
+ if (showsystray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) {
+ /* add systray icons */
+ if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) {
+ if (!(c = (Client *) calloc(1, sizeof(Client))))
+ die("fatal: could not malloc() %u bytes\n", sizeof(Client));
+ if (!(c->win = cme->data.l[2])) {
+ free(c);
+ return;
+ }
+ c->mon = selmon;
+ c->next = systray->icons;
+ systray->icons = c;
+ if (!XGetWindowAttributes(dpy, c->win, &wa)) {
+ /* use sane defaults */
+ wa.width = bh;
+ wa.height = bh;
+ wa.border_width = 0;
+ }
+ c->x = c->oldx = c->y = c->oldy = 0;
+ c->w = c->oldw = wa.width;
+ c->h = c->oldh = wa.height;
+ c->oldbw = wa.border_width;
+ c->bw = 0;
+ c->isfloating = True;
+ /* reuse tags field as mapped status */
+ c->tags = 1;
+ updatesizehints(c);
+ updatesystrayicongeom(c, wa.width, wa.height);
+ XAddToSaveSet(dpy, c->win);
+ XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask);
+ XReparentWindow(dpy, c->win, systray->win, 0, 0);
+ /* use parents background color */
+ swa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
+ XChangeWindowAttributes(dpy, c->win, CWBackPixel, &swa);
+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_EMBEDDED_NOTIFY, 0,
+ systray->win, XEMBED_EMBEDDED_VERSION);
+ /* FIXME not sure if I have to send these events, too */
+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_FOCUS_IN, 0, systray->win,
+ XEMBED_EMBEDDED_VERSION);
+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0,
+ systray->win, XEMBED_EMBEDDED_VERSION);
+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_MODALITY_ON, 0, systray->win,
+ XEMBED_EMBEDDED_VERSION);
+ XSync(dpy, False);
+ resizebarwin(selmon);
+ updatesystray();
+ setclientstate(c, NormalState);
+ }
+ return;
+ }
- if (!c)
- return;
- if (cme->message_type == netatom[NetWMState]) {
- if (cme->data.l[1] == netatom[NetWMFullscreen]
- || cme->data.l[2] == netatom[NetWMFullscreen])
- setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
- || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
- } else if (cme->message_type == netatom[NetActiveWindow]) {
- if (c != selmon->sel && !c->isurgent)
- seturgent(c, 1);
- }
+ if (!c)
+ return;
+ if (cme->message_type == netatom[NetWMState]) {
+ if (cme->data.l[1] == netatom[NetWMFullscreen]
+ || cme->data.l[2] == netatom[NetWMFullscreen])
+ setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
+ || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
+ } else if (cme->message_type == netatom[NetActiveWindow]) {
+ if (c != selmon->sel && !c->isurgent)
+ seturgent(c, 1);
+ }
}
void
-configure(Client *c)
-{
- XConfigureEvent ce;
+configure(Client *c) {
+ XConfigureEvent ce;
- ce.type = ConfigureNotify;
- ce.display = dpy;
- ce.event = c->win;
- ce.window = c->win;
- ce.x = c->x;
- ce.y = c->y;
- ce.width = c->w;
- ce.height = c->h;
- ce.border_width = c->bw;
- ce.above = None;
- ce.override_redirect = False;
- XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
+ ce.type = ConfigureNotify;
+ ce.display = dpy;
+ ce.event = c->win;
+ ce.window = c->win;
+ ce.x = c->x;
+ ce.y = c->y;
+ ce.width = c->w;
+ ce.height = c->h;
+ ce.border_width = c->bw;
+ ce.above = None;
+ ce.override_redirect = False;
+ XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *) &ce);
}
void
-configurenotify(XEvent *e)
-{
- Monitor *m;
- Client *c;
- XConfigureEvent *ev = &e->xconfigure;
- int dirty;
+configurenotify(XEvent *e) {
+ Monitor *m;
+ Client *c;
+ XConfigureEvent *ev = &e->xconfigure;
+ int dirty;
- /* TODO: updategeom handling sucks, needs to be simplified */
- if (ev->window == root) {
- dirty = (sw != ev->width || sh != ev->height);
- sw = ev->width;
- sh = ev->height;
- if (updategeom() || dirty) {
- drw_resize(drw, sw, bh);
- updatebars();
- for (m = mons; m; m = m->next) {
- for (c = m->clients; c; c = c->next)
- if (c->isfullscreen)
- resizeclient(c, m->mx, m->my, m->mw, m->mh);
- resizebarwin(m);
- }
- focus(NULL);
- arrange(NULL);
- }
- }
+ /* TODO: updategeom handling sucks, needs to be simplified */
+ if (ev->window == root) {
+ dirty = (sw != ev->width || sh != ev->height);
+ sw = ev->width;
+ sh = ev->height;
+ if (updategeom() || dirty) {
+ drw_resize(drw, sw, bh);
+ updatebars();
+ for (m = mons; m; m = m->next) {
+ for (c = m->clients; c; c = c->next)
+ if (c->isfullscreen)
+ resizeclient(c, m->mx, m->my, m->mw, m->mh);
+ resizebarwin(m);
+ }
+ focus(NULL);
+ arrange(NULL);
+ }
+ }
}
void
-configurerequest(XEvent *e)
-{
- Client *c;
- Monitor *m;
- XConfigureRequestEvent *ev = &e->xconfigurerequest;
- XWindowChanges wc;
+configurerequest(XEvent *e) {
+ Client *c;
+ Monitor *m;
+ XConfigureRequestEvent *ev = &e->xconfigurerequest;
+ XWindowChanges wc;
- if ((c = wintoclient(ev->window))) {
- if (ev->value_mask & CWBorderWidth)
- c->bw = ev->border_width;
- else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
- m = c->mon;
- if (ev->value_mask & CWX) {
- c->oldx = c->x;
- c->x = m->mx + ev->x;
- }
- if (ev->value_mask & CWY) {
- c->oldy = c->y;
- c->y = m->my + ev->y;
- }
- if (ev->value_mask & CWWidth) {
- c->oldw = c->w;
- c->w = ev->width;
- }
- if (ev->value_mask & CWHeight) {
- c->oldh = c->h;
- c->h = ev->height;
- }
- if ((c->x + c->w) > m->mx + m->mw && c->isfloating)
- c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */
- if ((c->y + c->h) > m->my + m->mh && c->isfloating)
- c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */
- if ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight)))
- configure(c);
- if (ISVISIBLE(c))
- XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
- } else
- configure(c);
- } else {
- wc.x = ev->x;
- wc.y = ev->y;
- wc.width = ev->width;
- wc.height = ev->height;
- wc.border_width = ev->border_width;
- wc.sibling = ev->above;
- wc.stack_mode = ev->detail;
- XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
- }
- XSync(dpy, False);
+ if ((c = wintoclient(ev->window))) {
+ if (ev->value_mask & CWBorderWidth)
+ c->bw = ev->border_width;
+ else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) {
+ m = c->mon;
+ if (ev->value_mask & CWX) {
+ c->oldx = c->x;
+ c->x = m->mx + ev->x;
+ }
+ if (ev->value_mask & CWY) {
+ c->oldy = c->y;
+ c->y = m->my + ev->y;
+ }
+ if (ev->value_mask & CWWidth) {
+ c->oldw = c->w;
+ c->w = ev->width;
+ }
+ if (ev->value_mask & CWHeight) {
+ c->oldh = c->h;
+ c->h = ev->height;
+ }
+ if ((c->x + c->w) > m->mx + m->mw && c->isfloating)
+ c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */
+ if ((c->y + c->h) > m->my + m->mh && c->isfloating)
+ c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */
+ if ((ev->value_mask & (CWX | CWY)) && !(ev->value_mask & (CWWidth | CWHeight)))
+ configure(c);
+ if (ISVISIBLE(c))
+ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
+ } else
+ configure(c);
+ } else {
+ wc.x = ev->x;
+ wc.y = ev->y;
+ wc.width = ev->width;
+ wc.height = ev->height;
+ wc.border_width = ev->border_width;
+ wc.sibling = ev->above;
+ wc.stack_mode = ev->detail;
+ XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
+ }
+ XSync(dpy, False);
}
Monitor *
-createmon(void)
-{
- Monitor *m;
- unsigned int i;
+createmon(void) {
+ Monitor *m;
+ unsigned int i;
- m = ecalloc(1, sizeof(Monitor));
- m->tagset[0] = m->tagset[1] = 1;
- m->mfact = mfact;
- m->nmaster = nmaster;
- m->showbar = showbar;
- m->topbar = topbar;
- m->lt[0] = &layouts[0];
- m->lt[1] = &layouts[1 % LENGTH(layouts)];
- strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
- m->pertag = ecalloc(1, sizeof(Pertag));
- m->pertag->curtag = m->pertag->prevtag = 1;
+ m = ecalloc(1, sizeof(Monitor));
+ m->tagset[0] = m->tagset[1] = 1;
+ m->mfact = mfact;
+ m->nmaster = nmaster;
+ m->showbar = showbar;
+ m->topbar = topbar;
+ m->lt[0] = &layouts[0];
+ m->lt[1] = &layouts[1 % LENGTH(layouts)];
+ strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol);
+ m->pertag = ecalloc(1, sizeof(Pertag));
+ m->pertag->curtag = m->pertag->prevtag = 1;
- for (i = 0; i <= LENGTH(tags); i++) {
- m->pertag->nmasters[i] = m->nmaster;
- m->pertag->mfacts[i] = m->mfact;
+ for (i = 0; i <= LENGTH(tags); i++) {
+ m->pertag->nmasters[i] = m->nmaster;
+ m->pertag->mfacts[i] = m->mfact;
- m->pertag->ltidxs[i][0] = m->lt[0];
- m->pertag->ltidxs[i][1] = m->lt[1];
- m->pertag->sellts[i] = m->sellt;
+ m->pertag->ltidxs[i][0] = m->lt[0];
+ m->pertag->ltidxs[i][1] = m->lt[1];
+ m->pertag->sellts[i] = m->sellt;
- m->pertag->showbars[i] = m->showbar;
- }
+ m->pertag->showbars[i] = m->showbar;
+ }
- return m;
+ return m;
}
void
-destroynotify(XEvent *e)
-{
- Client *c;
- XDestroyWindowEvent *ev = &e->xdestroywindow;
+destroynotify(XEvent *e) {
+ Client *c;
+ XDestroyWindowEvent *ev = &e->xdestroywindow;
- if ((c = wintoclient(ev->window)))
- unmanage(c, 1);
- else if ((c = wintosystrayicon(ev->window))) {
- removesystrayicon(c);
- resizebarwin(selmon);
- updatesystray();
- }
+ if ((c = wintoclient(ev->window)))
+ unmanage(c, 1);
+ else if ((c = wintosystrayicon(ev->window))) {
+ removesystrayicon(c);
+ resizebarwin(selmon);
+ updatesystray();
+ }
}
void
-detach(Client *c)
-{
- Client **tc;
+detach(Client *c) {
+ Client **tc;
- for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
- *tc = c->next;
+ for (tc = &c->mon->clients; *tc && *tc != c; tc = &(*tc)->next);
+ *tc = c->next;
}
void
-detachstack(Client *c)
-{
- Client **tc, *t;
+detachstack(Client *c) {
+ Client **tc, *t;
- for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
- *tc = c->snext;
+ for (tc = &c->mon->stack; *tc && *tc != c; tc = &(*tc)->snext);
+ *tc = c->snext;
- if (c == c->mon->sel) {
- for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
- c->mon->sel = t;
- }
+ if (c == c->mon->sel) {
+ for (t = c->mon->stack; t && !ISVISIBLE(t); t = t->snext);
+ c->mon->sel = t;
+ }
}
Monitor *
-dirtomon(int dir)
-{
- Monitor *m = NULL;
+dirtomon(int dir) {
+ Monitor *m = NULL;
- if (dir > 0) {
- if (!(m = selmon->next))
- m = mons;
- } else if (selmon == mons)
- for (m = mons; m->next; m = m->next);
- else
- for (m = mons; m->next != selmon; m = m->next);
- return m;
+ if (dir > 0) {
+ if (!(m = selmon->next))
+ m = mons;
+ } else if (selmon == mons)
+ for (m = mons; m->next; m = m->next);
+ else
+ for (m = mons; m->next != selmon; m = m->next);
+ return m;
}
void
-drawbar(Monitor *m)
-{
- int x, w, tw = 0, stw = 0;
- int boxs = drw->fonts->h / 9;
- int boxw = drw->fonts->h / 6 + 2;
- unsigned int i, occ = 0, urg = 0;
- Client *c;
+drawbar(Monitor *m) {
+ int x, w, tw = 0, stw = 0;
+ int boxs = drw->fonts->h / 9;
+ int boxw = drw->fonts->h / 6 + 2;
+ unsigned int i, occ = 0, urg = 0;
+ Client *c;
- if (!m->showbar)
- return;
+ if (!m->showbar)
+ return;
- if(showsystray && m == systraytomon(m) && !systrayonleft)
- stw = getsystraywidth();
+ if (showsystray && m == systraytomon(m) && !systrayonleft)
+ stw = getsystraywidth();
- /* draw status first so it can be overdrawn by tags later */
- if (m == selmon) { /* status is only drawn on selected monitor */
- drw_setscheme(drw, scheme[SchemeNorm]);
- tw = TEXTW(stext) - lrpad / 2 + 2; /* 2px extra right padding */
- drw_text(drw, m->ww - tw - stw, 0, tw, bh, lrpad / 2 - 2, stext, 0);
- }
+ /* draw status first so it can be overdrawn by tags later */
+ if (m == selmon) { /* status is only drawn on selected monitor */
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ tw = TEXTW(stext) - lrpad / 2 + 2; /* 2px extra right padding */
+ drw_text(drw, m->ww - tw - stw, 0, tw, bh, lrpad / 2 - 2, stext, 0);
+ }
- resizebarwin(m);
- for (c = m->clients; c; c = c->next) {
- occ |= c->tags;
- if (c->isurgent)
- urg |= c->tags;
- }
- x = 0;
- for (i = 0; i < LENGTH(tags); i++) {
- w = TEXTW(tags[i]);
- drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
- drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
- if (occ & 1 << i)
- drw_rect(drw, x + boxs, boxs, boxw, boxw,
- m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
- urg & 1 << i);
- x += w;
- }
- w = blw = TEXTW(m->ltsymbol);
- drw_setscheme(drw, scheme[SchemeNorm]);
- x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
+ resizebarwin(m);
+ for (c = m->clients; c; c = c->next) {
+ occ |= c->tags;
+ if (c->isurgent)
+ urg |= c->tags;
+ }
+ x = 0;
+ for (i = 0; i < LENGTH(tags); i++) {
+ w = TEXTW(tags[i]);
+ drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i);
+ if (occ & 1 << i)
+ drw_rect(drw, x + boxs, boxs, boxw, boxw,
+ m == selmon && selmon->sel && selmon->sel->tags & 1 << i,
+ urg & 1 << i);
+ x += w;
+ }
+ w = blw = TEXTW(m->ltsymbol);
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
- if ((w = m->ww - tw - stw - x) > bh) {
- if (m->sel) {
- drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
- drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
- if (m->sel->isfloating)
- drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
- } else {
- drw_setscheme(drw, scheme[SchemeNorm]);
- drw_rect(drw, x, 0, w, bh, 1, 1);
- }
- }
- drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
+ if ((w = m->ww - tw - stw - x) > bh) {
+ if (m->sel) {
+ drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
+ drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0);
+ if (m->sel->isfloating)
+ drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0);
+ } else {
+ drw_setscheme(drw, scheme[SchemeNorm]);
+ drw_rect(drw, x, 0, w, bh, 1, 1);
+ }
+ }
+ drw_map(drw, m->barwin, 0, 0, m->ww - stw, bh);
}
void
-drawbars(void)
-{
- Monitor *m;
+drawbars(void) {
+ Monitor *m;
- for (m = mons; m; m = m->next)
- drawbar(m);
+ for (m = mons; m; m = m->next)
+ drawbar(m);
}
void
-enternotify(XEvent *e)
-{
- Client *c;
- Monitor *m;
- XCrossingEvent *ev = &e->xcrossing;
+enternotify(XEvent *e) {
+ Client *c;
+ Monitor *m;
+ XCrossingEvent *ev = &e->xcrossing;
- if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
- return;
- c = wintoclient(ev->window);
- m = c ? c->mon : wintomon(ev->window);
- if (m != selmon) {
- unfocus(selmon->sel, 1);
- selmon = m;
- } else if (!c || c == selmon->sel)
- return;
- focus(c);
+ if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root)
+ return;
+ c = wintoclient(ev->window);
+ m = c ? c->mon : wintomon(ev->window);
+ if (m != selmon) {
+ unfocus(selmon->sel, 1);
+ selmon = m;
+ } else if (!c || c == selmon->sel)
+ return;
+ focus(c);
}
void
-expose(XEvent *e)
-{
- Monitor *m;
- XExposeEvent *ev = &e->xexpose;
+expose(XEvent *e) {
+ Monitor *m;
+ XExposeEvent *ev = &e->xexpose;
- if (ev->count == 0 && (m = wintomon(ev->window))) {
- drawbar(m);
- if (m == selmon)
- updatesystray();
- }
+ if (ev->count == 0 && (m = wintomon(ev->window))) {
+ drawbar(m);
+ if (m == selmon)
+ updatesystray();
+ }
}
void
-focus(Client *c)
-{
- if (!c || !ISVISIBLE(c))
- for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
- if (selmon->sel && selmon->sel != c)
- unfocus(selmon->sel, 0);
- if (c) {
- if (c->mon != selmon)
- selmon = c->mon;
- if (c->isurgent)
- seturgent(c, 0);
- detachstack(c);
- attachstack(c);
- grabbuttons(c, 1);
- XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel);
- setfocus(c);
- } else {
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
- }
- selmon->sel = c;
- drawbars();
+focus(Client *c) {
+ if (!c || !ISVISIBLE(c))
+ for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
+ if (selmon->sel && selmon->sel != c)
+ unfocus(selmon->sel, 0);
+ if (c) {
+ if (c->mon != selmon)
+ selmon = c->mon;
+ if (c->isurgent)
+ seturgent(c, 0);
+ detachstack(c);
+ attachstack(c);
+ grabbuttons(c, 1);
+ XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel);
+ setfocus(c);
+ } else {
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+ }
+ selmon->sel = c;
+ drawbars();
}
/* there are some broken focus acquiring clients needing extra handling */
void
-focusin(XEvent *e)
-{
- XFocusChangeEvent *ev = &e->xfocus;
+focusin(XEvent *e) {
+ XFocusChangeEvent *ev = &e->xfocus;
- if (selmon->sel && ev->window != selmon->sel->win)
- setfocus(selmon->sel);
+ if (selmon->sel && ev->window != selmon->sel->win)
+ setfocus(selmon->sel);
}
void
-focusmon(const Arg *arg)
-{
- Monitor *m;
+focusmon(const Arg *arg) {
+ Monitor *m;
- if (!mons->next)
- return;
- if ((m = dirtomon(arg->i)) == selmon)
- return;
- unfocus(selmon->sel, 0);
- selmon = m;
- focus(NULL);
+ if (!mons->next)
+ return;
+ if ((m = dirtomon(arg->i)) == selmon)
+ return;
+ unfocus(selmon->sel, 0);
+ selmon = m;
+ focus(NULL);
}
void
-focusstack(const Arg *arg)
-{
- Client *c = NULL, *i;
+focusstack(const Arg *arg) {
+ Client *c = NULL, *i;
- if (!selmon->sel || (selmon->sel->isfullscreen && lockfullscreen))
- return;
- if (arg->i > 0) {
- for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
- if (!c)
- for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
- } else {
- for (i = selmon->clients; i != selmon->sel; i = i->next)
- if (ISVISIBLE(i))
- c = i;
- if (!c)
- for (; i; i = i->next)
- if (ISVISIBLE(i))
- c = i;
- }
- if (c) {
- focus(c);
- restack(selmon);
- }
+ if (!selmon->sel || (selmon->sel->isfullscreen && lockfullscreen))
+ return;
+ if (arg->i > 0) {
+ for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
+ if (!c)
+ for (c = selmon->clients; c && !ISVISIBLE(c); c = c->next);
+ } else {
+ for (i = selmon->clients; i != selmon->sel; i = i->next)
+ if (ISVISIBLE(i))
+ c = i;
+ if (!c)
+ for (; i; i = i->next)
+ if (ISVISIBLE(i))
+ c = i;
+ }
+ if (c) {
+ focus(c);
+ restack(selmon);
+ }
}
Atom
-getatomprop(Client *c, Atom prop)
-{
- int di;
- unsigned long dl;
- unsigned char *p = NULL;
- Atom da, atom = None;
+getatomprop(Client *c, Atom prop) {
+ int di;
+ unsigned long dl;
+ unsigned char *p = NULL;
+ Atom da, atom = None;
- /* FIXME getatomprop should return the number of items and a pointer to
- * the stored data instead of this workaround */
- Atom req = XA_ATOM;
- if (prop == xatom[XembedInfo])
- req = xatom[XembedInfo];
+ /* FIXME getatomprop should return the number of items and a pointer to
+ * the stored data instead of this workaround */
+ Atom req = XA_ATOM;
+ if (prop == xatom[XembedInfo])
+ req = xatom[XembedInfo];
- if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, req,
- &da, &di, &dl, &dl, &p) == Success && p) {
- atom = *(Atom *)p;
- if (da == xatom[XembedInfo] && dl == 2)
- atom = ((Atom *)p)[1];
- XFree(p);
- }
- return atom;
+ if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, req,
+ &da, &di, &dl, &dl, &p) == Success && p) {
+ atom = *(Atom *) p;
+ if (da == xatom[XembedInfo] && dl == 2)
+ atom = ((Atom *) p)[1];
+ XFree(p);
+ }
+ return atom;
}
int
-getrootptr(int *x, int *y)
-{
- int di;
- unsigned int dui;
- Window dummy;
+getrootptr(int *x, int *y) {
+ int di;
+ unsigned int dui;
+ Window dummy;
- return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
+ return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui);
}
long
-getstate(Window w)
-{
- int format;
- long result = -1;
- unsigned char *p = NULL;
- unsigned long n, extra;
- Atom real;
+getstate(Window w) {
+ int format;
+ long result = -1;
+ unsigned char *p = NULL;
+ unsigned long n, extra;
+ Atom real;
- if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
- &real, &format, &n, &extra, (unsigned char **)&p) != Success)
- return -1;
- if (n != 0)
- result = *p;
- XFree(p);
- return result;
+ if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
+ &real, &format, &n, &extra, (unsigned char **) &p) != Success)
+ return -1;
+ if (n != 0)
+ result = *p;
+ XFree(p);
+ return result;
}
unsigned int
-getsystraywidth()
-{
- unsigned int w = 0;
- Client *i;
- if(showsystray)
- for(i = systray->icons; i; w += i->w + systrayspacing, i = i->next) ;
- return w ? w + systrayspacing : 1;
+getsystraywidth() {
+ unsigned int w = 0;
+ Client *i;
+ if (showsystray)
+ for (i = systray->icons; i; w += i->w + systrayspacing, i = i->next);
+ return w ? w + systrayspacing : 1;
}
int
-gettextprop(Window w, Atom atom, char *text, unsigned int size)
-{
- char **list = NULL;
- int n;
- XTextProperty name;
+gettextprop(Window w, Atom atom, char *text, unsigned int size) {
+ char **list = NULL;
+ int n;
+ XTextProperty name;
- if (!text || size == 0)
- return 0;
- text[0] = '\0';
- if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems)
- return 0;
- if (name.encoding == XA_STRING)
- strncpy(text, (char *)name.value, size - 1);
- else {
- if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
- strncpy(text, *list, size - 1);
- XFreeStringList(list);
- }
- }
- text[size - 1] = '\0';
- XFree(name.value);
- return 1;
+ if (!text || size == 0)
+ return 0;
+ text[0] = '\0';
+ if (!XGetTextProperty(dpy, w, &name, atom) || !name.nitems)
+ return 0;
+ if (name.encoding == XA_STRING)
+ strncpy(text, (char *) name.value, size - 1);
+ else {
+ if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) {
+ strncpy(text, *list, size - 1);
+ XFreeStringList(list);
+ }
+ }
+ text[size - 1] = '\0';
+ XFree(name.value);
+ return 1;
}
void
-grabbuttons(Client *c, int focused)
-{
- updatenumlockmask();
- {
- unsigned int i, j;
- unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
- XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
- if (!focused)
- XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
- BUTTONMASK, GrabModeSync, GrabModeSync, None, None);
- for (i = 0; i < LENGTH(buttons); i++)
- if (buttons[i].click == ClkClientWin)
- for (j = 0; j < LENGTH(modifiers); j++)
- XGrabButton(dpy, buttons[i].button,
- buttons[i].mask | modifiers[j],
- c->win, False, BUTTONMASK,
- GrabModeAsync, GrabModeSync, None, None);
- }
+grabbuttons(Client *c, int focused) {
+ updatenumlockmask();
+ {
+ unsigned int i, j;
+ unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask};
+ XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
+ if (!focused)
+ XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
+ BUTTONMASK, GrabModeSync, GrabModeSync, None, None);
+ for (i = 0; i < LENGTH(buttons); i++)
+ if (buttons[i].click == ClkClientWin)
+ for (j = 0; j < LENGTH(modifiers); j++)
+ XGrabButton(dpy, buttons[i].button,
+ buttons[i].mask | modifiers[j],
+ c->win, False, BUTTONMASK,
+ GrabModeAsync, GrabModeSync, None, None);
+ }
}
void
-grabkeys(void)
-{
- updatenumlockmask();
- {
- unsigned int i, j;
- unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
- KeyCode code;
- KeyCode chain;
+grabkeys(void) {
+ updatenumlockmask();
+ {
+ unsigned int i, j;
+ unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask};
+ KeyCode code;
+ KeyCode chain;
- XUngrabKey(dpy, AnyKey, AnyModifier, root);
- for (i = 0; i < LENGTH(keys); i++)
- if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) {
- if (keys[i].chain != -1 &&
- ((chain = XKeysymToKeycode(dpy, keys[i].chain))))
- code = chain;
- for (j = 0; j < LENGTH(modifiers); j++)
- XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
- True, GrabModeAsync, GrabModeAsync);
- }
- }
+ XUngrabKey(dpy, AnyKey, AnyModifier, root);
+ for (i = 0; i < LENGTH(keys); i++)
+ if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) {
+ if (keys[i].chain != -1 &&
+ ((chain = XKeysymToKeycode(dpy, keys[i].chain))))
+ code = chain;
+ for (j = 0; j < LENGTH(modifiers); j++)
+ XGrabKey(dpy, code, keys[i].mod | modifiers[j], root,
+ True, GrabModeAsync, GrabModeAsync);
+ }
+ }
}
void
-incnmaster(const Arg *arg)
-{
- selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0);
- arrange(selmon);
+incnmaster(const Arg *arg) {
+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0);
+ arrange(selmon);
}
#ifdef XINERAMA
static int
isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info)
{
- while (n--)
- if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org
- && unique[n].width == info->width && unique[n].height == info->height)
- return 0;
- return 1;
+ while (n--)
+ if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org
+ && unique[n].width == info->width && unique[n].height == info->height)
+ return 0;
+ return 1;
}
#endif /* XINERAMA */
void
-keypress(XEvent *e)
-{
- unsigned int i, j;
- KeySym keysym;
- XKeyEvent *ev;
- int current = 0;
- unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask };
+keypress(XEvent *e) {
+ unsigned int i, j;
+ KeySym keysym;
+ XKeyEvent *ev;
+ int current = 0;
+ unsigned int modifiers[] = {0, LockMask, numlockmask, numlockmask | LockMask};
- ev = &e->xkey;
- keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
- for (i = 0; i < LENGTH(keys); i++) {
- if (keysym == keys[i].keysym && keys[i].chain == -1
- && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
- && keys[i].func)
- keys[i].func(&(keys[i].arg));
- else if (keysym == keys[i].chain && keychain == -1
- && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
- && keys[i].func) {
- current = 1;
- keychain = keysym;
- for (j = 0; j < LENGTH(modifiers); j++)
- XGrabKey(dpy, AnyKey, 0 | modifiers[j], root,
- True, GrabModeAsync, GrabModeAsync);
- } else if (!current && keysym == keys[i].keysym
- && keychain != -1
- && keys[i].chain == keychain
- && keys[i].func)
- keys[i].func(&(keys[i].arg));
- }
- if (!current) {
- keychain = -1;
- grabkeys();
- }
+ ev = &e->xkey;
+ keysym = XKeycodeToKeysym(dpy, (KeyCode) ev->keycode, 0);
+ for (i = 0; i < LENGTH(keys); i++) {
+ if (keysym == keys[i].keysym && keys[i].chain == -1
+ && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
+ && keys[i].func)
+ keys[i].func(&(keys[i].arg));
+ else if (keysym == keys[i].chain && keychain == -1
+ && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state)
+ && keys[i].func) {
+ current = 1;
+ keychain = keysym;
+ for (j = 0; j < LENGTH(modifiers); j++)
+ XGrabKey(dpy, AnyKey, 0 | modifiers[j], root,
+ True, GrabModeAsync, GrabModeAsync);
+ } else if (!current && keysym == keys[i].keysym
+ && keychain != -1
+ && keys[i].chain == keychain
+ && keys[i].func)
+ keys[i].func(&(keys[i].arg));
+ }
+ if (!current) {
+ keychain = -1;
+ grabkeys();
+ }
}
void
-killclient(const Arg *arg)
-{
- if (!selmon->sel)
- return;
+killclient(const Arg *arg) {
+ if (!selmon->sel)
+ return;
- if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0 , 0, 0)) {
- XGrabServer(dpy);
- XSetErrorHandler(xerrordummy);
- XSetCloseDownMode(dpy, DestroyAll);
- XKillClient(dpy, selmon->sel->win);
- XSync(dpy, False);
- XSetErrorHandler(xerror);
- XUngrabServer(dpy);
- }
+ if (!sendevent(selmon->sel->win, wmatom[WMDelete], NoEventMask, wmatom[WMDelete], CurrentTime, 0, 0, 0)) {
+ XGrabServer(dpy);
+ XSetErrorHandler(xerrordummy);
+ XSetCloseDownMode(dpy, DestroyAll);
+ XKillClient(dpy, selmon->sel->win);
+ XSync(dpy, False);
+ XSetErrorHandler(xerror);
+ XUngrabServer(dpy);
+ }
}
void
-manage(Window w, XWindowAttributes *wa)
-{
- Client *c, *t = NULL;
- Window trans = None;
- XWindowChanges wc;
+manage(Window w, XWindowAttributes *wa) {
+ Client *c, *t = NULL;
+ Window trans = None;
+ XWindowChanges wc;
- c = ecalloc(1, sizeof(Client));
- c->win = w;
- /* geometry */
- c->x = c->oldx = wa->x;
- c->y = c->oldy = wa->y;
- c->w = c->oldw = wa->width;
- c->h = c->oldh = wa->height;
- c->oldbw = wa->border_width;
+ c = ecalloc(1, sizeof(Client));
+ c->win = w;
+ /* geometry */
+ c->x = c->oldx = wa->x;
+ c->y = c->oldy = wa->y;
+ c->w = c->oldw = wa->width;
+ c->h = c->oldh = wa->height;
+ c->oldbw = wa->border_width;
- updatetitle(c);
- if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
- c->mon = t->mon;
- c->tags = t->tags;
- } else {
- c->mon = selmon;
- applyrules(c);
- }
+ updatetitle(c);
+ if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) {
+ c->mon = t->mon;
+ c->tags = t->tags;
+ } else {
+ c->mon = selmon;
+ applyrules(c);
+ }
- if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
- c->x = c->mon->mx + c->mon->mw - WIDTH(c);
- if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
- c->y = c->mon->my + c->mon->mh - HEIGHT(c);
- c->x = MAX(c->x, c->mon->mx);
- /* only fix client y-offset, if the client center might cover the bar */
- c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
- && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
- c->bw = borderpx;
+ if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)
+ c->x = c->mon->mx + c->mon->mw - WIDTH(c);
+ if (c->y + HEIGHT(c) > c->mon->my + c->mon->mh)
+ c->y = c->mon->my + c->mon->mh - HEIGHT(c);
+ c->x = MAX(c->x, c->mon->mx);
+ /* only fix client y-offset, if the client center might cover the bar */
+ c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
+ && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
+ c->bw = borderpx;
- wc.border_width = c->bw;
- XConfigureWindow(dpy, w, CWBorderWidth, &wc);
- XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
- configure(c); /* propagates border_width, if size doesn't change */
- updatewindowtype(c);
- updatesizehints(c);
- updatewmhints(c);
- c->x = c->mon->mx + (c->mon->mw - WIDTH(c)) / 2;
- c->y = c->mon->my + (c->mon->mh - HEIGHT(c)) / 2;
- XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
- grabbuttons(c, 0);
- if (!c->isfloating)
- c->isfloating = c->oldstate = trans != None || c->isfixed;
- if (c->isfloating)
- XRaiseWindow(dpy, c->win);
- attach(c);
- attachstack(c);
- XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend,
- (unsigned char *) &(c->win), 1);
- XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
- setclientstate(c, NormalState);
- if (c->mon == selmon)
- unfocus(selmon->sel, 0);
- c->mon->sel = c;
- arrange(c->mon);
- XMapWindow(dpy, c->win);
- focus(NULL);
+ wc.border_width = c->bw;
+ XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+ XSetWindowBorder(dpy, w, scheme[SchemeNorm][ColBorder].pixel);
+ configure(c); /* propagates border_width, if size doesn't change */
+ updatewindowtype(c);
+ updatesizehints(c);
+ updatewmhints(c);
+ c->x = c->mon->mx + (c->mon->mw - WIDTH(c)) / 2;
+ c->y = c->mon->my + (c->mon->mh - HEIGHT(c)) / 2;
+ XSelectInput(dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask);
+ grabbuttons(c, 0);
+ if (!c->isfloating)
+ c->isfloating = c->oldstate = trans != None || c->isfixed;
+ if (c->isfloating)
+ XRaiseWindow(dpy, c->win);
+ attach(c);
+ attachstack(c);
+ XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend,
+ (unsigned char *) &(c->win), 1);
+ XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
+ setclientstate(c, NormalState);
+ if (c->mon == selmon)
+ unfocus(selmon->sel, 0);
+ c->mon->sel = c;
+ arrange(c->mon);
+ XMapWindow(dpy, c->win);
+ focus(NULL);
}
void
-mappingnotify(XEvent *e)
-{
- XMappingEvent *ev = &e->xmapping;
+mappingnotify(XEvent *e) {
+ XMappingEvent *ev = &e->xmapping;
- XRefreshKeyboardMapping(ev);
- if (ev->request == MappingKeyboard)
- grabkeys();
+ XRefreshKeyboardMapping(ev);
+ if (ev->request == MappingKeyboard)
+ grabkeys();
}
void
-maprequest(XEvent *e)
-{
- static XWindowAttributes wa;
- XMapRequestEvent *ev = &e->xmaprequest;
+maprequest(XEvent *e) {
+ static XWindowAttributes wa;
+ XMapRequestEvent *ev = &e->xmaprequest;
- Client *i;
- if ((i = wintosystrayicon(ev->window))) {
- sendevent(i->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0, systray->win, XEMBED_EMBEDDED_VERSION);
- resizebarwin(selmon);
- updatesystray();
- }
+ Client *i;
+ if ((i = wintosystrayicon(ev->window))) {
+ sendevent(i->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0, systray->win,
+ XEMBED_EMBEDDED_VERSION);
+ resizebarwin(selmon);
+ updatesystray();
+ }
- if (!XGetWindowAttributes(dpy, ev->window, &wa))
- return;
- if (wa.override_redirect)
- return;
- if (!wintoclient(ev->window))
- manage(ev->window, &wa);
+ if (!XGetWindowAttributes(dpy, ev->window, &wa))
+ return;
+ if (wa.override_redirect)
+ return;
+ if (!wintoclient(ev->window))
+ manage(ev->window, &wa);
}
void
-motionnotify(XEvent *e)
-{
- static Monitor *mon = NULL;
- Monitor *m;
- XMotionEvent *ev = &e->xmotion;
+motionnotify(XEvent *e) {
+ static Monitor *mon = NULL;
+ Monitor *m;
+ XMotionEvent *ev = &e->xmotion;
- if (ev->window != root)
- return;
- if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
- unfocus(selmon->sel, 1);
- selmon = m;
- focus(NULL);
- }
- mon = m;
+ if (ev->window != root)
+ return;
+ if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
+ unfocus(selmon->sel, 1);
+ selmon = m;
+ focus(NULL);
+ }
+ mon = m;
}
void
-movemouse(const Arg *arg)
-{
- int x, y, ocx, ocy, nx, ny;
- Client *c;
- Monitor *m;
- XEvent ev;
- Time lasttime = 0;
+movemouse(const Arg *arg) {
+ int x, y, ocx, ocy, nx, ny;
+ Client *c;
+ Monitor *m;
+ XEvent ev;
+ Time lasttime = 0;
- if (!(c = selmon->sel))
- return;
- if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
- return;
- restack(selmon);
- ocx = c->x;
- ocy = c->y;
- if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
- None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess)
- return;
- if (!getrootptr(&x, &y))
- return;
- do {
- XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
- switch(ev.type) {
- case ConfigureRequest:
- case Expose:
- case MapRequest:
- handler[ev.type](&ev);
- break;
- case MotionNotify:
- if ((ev.xmotion.time - lasttime) <= (1000 / 60))
- continue;
- lasttime = ev.xmotion.time;
+ if (!(c = selmon->sel))
+ return;
+ if (c->isfullscreen) /* no support moving fullscreen windows by mouse */
+ return;
+ restack(selmon);
+ ocx = c->x;
+ ocy = c->y;
+ if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
+ None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess)
+ return;
+ if (!getrootptr(&x, &y))
+ return;
+ do {
+ XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev);
+ switch (ev.type) {
+ case ConfigureRequest:
+ case Expose:
+ case MapRequest:
+ handler[ev.type](&ev);
+ break;
+ case MotionNotify:
+ if ((ev.xmotion.time - lasttime) <= (1000 / 60))
+ continue;
+ lasttime = ev.xmotion.time;
- nx = ocx + (ev.xmotion.x - x);
- ny = ocy + (ev.xmotion.y - y);
- if (abs(selmon->wx - nx) < snap)
- nx = selmon->wx;
- else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
- nx = selmon->wx + selmon->ww - WIDTH(c);
- if (abs(selmon->wy - ny) < snap)
- ny = selmon->wy;
- else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
- ny = selmon->wy + selmon->wh - HEIGHT(c);
- if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
- && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
- togglefloating(NULL);
- if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
- resize(c, nx, ny, c->w, c->h, 1);
- break;
- }
- } while (ev.type != ButtonRelease);
- XUngrabPointer(dpy, CurrentTime);
- if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
- sendmon(c, m);
- selmon = m;
- focus(NULL);
- }
+ nx = ocx + (ev.xmotion.x - x);
+ ny = ocy + (ev.xmotion.y - y);
+ if (abs(selmon->wx - nx) < snap)
+ nx = selmon->wx;
+ else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap)
+ nx = selmon->wx + selmon->ww - WIDTH(c);
+ if (abs(selmon->wy - ny) < snap)
+ ny = selmon->wy;
+ else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap)
+ ny = selmon->wy + selmon->wh - HEIGHT(c);
+ if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
+ && (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
+ togglefloating(NULL);
+ if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+ resize(c, nx, ny, c->w, c->h, 1);
+ break;
+ }
+ } while (ev.type != ButtonRelease);
+ XUngrabPointer(dpy, CurrentTime);
+ if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
+ sendmon(c, m);
+ selmon = m;
+ focus(NULL);
+ }
}
Client *
-nexttiled(Client *c)
-{
- for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
- return c;
+nexttiled(Client *c) {
+ for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next);
+ return c;
}
void
-pop(Client *c)
-{
- detach(c);
- attach(c);
- focus(c);
- arrange(c->mon);
+pop(Client *c) {
+ detach(c);
+ attach(c);
+ focus(c);
+ arrange(c->mon);
}
void
-propertynotify(XEvent *e)
-{
- Client *c;
- Window trans;
- XPropertyEvent *ev = &e->xproperty;
+propertynotify(XEvent *e) {
+ Client *c;
+ Window trans;
+ XPropertyEvent *ev = &e->xproperty;
- if ((c = wintosystrayicon(ev->window))) {
- if (ev->atom == XA_WM_NORMAL_HINTS) {
- updatesizehints(c);
- updatesystrayicongeom(c, c->w, c->h);
- }
- else
- updatesystrayiconstate(c, ev);
- resizebarwin(selmon);
- updatesystray();
- }
+ if ((c = wintosystrayicon(ev->window))) {
+ if (ev->atom == XA_WM_NORMAL_HINTS) {
+ updatesizehints(c);
+ updatesystrayicongeom(c, c->w, c->h);
+ } else
+ updatesystrayiconstate(c, ev);
+ resizebarwin(selmon);
+ updatesystray();
+ }
if ((ev->window == root) && (ev->atom == XA_WM_NAME))
- updatestatus();
- else if (ev->state == PropertyDelete)
- return; /* ignore */
- else if ((c = wintoclient(ev->window))) {
- switch(ev->atom) {
- default: break;
- case XA_WM_TRANSIENT_FOR:
- if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
- (c->isfloating = (wintoclient(trans)) != NULL))
- arrange(c->mon);
- break;
- case XA_WM_NORMAL_HINTS:
- c->hintsvalid = 0;
- break;
- case XA_WM_HINTS:
- updatewmhints(c);
- drawbars();
- break;
- }
- if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
- updatetitle(c);
- if (c == c->mon->sel)
- drawbar(c->mon);
- }
- if (ev->atom == netatom[NetWMWindowType])
- updatewindowtype(c);
- }
+ updatestatus();
+ else if (ev->state == PropertyDelete)
+ return; /* ignore */
+ else if ((c = wintoclient(ev->window))) {
+ switch (ev->atom) {
+ default:
+ break;
+ case XA_WM_TRANSIENT_FOR:
+ if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) &&
+ (c->isfloating = (wintoclient(trans)) != NULL))
+ arrange(c->mon);
+ break;
+ case XA_WM_NORMAL_HINTS:
+ c->hintsvalid = 0;
+ break;
+ case XA_WM_HINTS:
+ updatewmhints(c);
+ drawbars();
+ break;
+ }
+ if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) {
+ updatetitle(c);
+ if (c == c->mon->sel)
+ drawbar(c->mon);
+ }
+ if (ev->atom == netatom[NetWMWindowType])
+ updatewindowtype(c);
+ }
}
void
-quit(const Arg *arg)
-{
- size_t i;
+quit(const Arg *arg) {
+ size_t i;
- /* kill child processes */
- for (i = 0; i < autostart_len; i++) {
- if (0 < autostart_pids[i]) {
- kill(autostart_pids[i], SIGTERM);
- waitpid(autostart_pids[i], NULL, 0);
- }
- }
+ /* kill child processes */
+ for (i = 0; i < autostart_len; i++) {
+ if (0 < autostart_pids[i]) {
+ kill(autostart_pids[i], SIGTERM);
+ waitpid(autostart_pids[i], NULL, 0);
+ }
+ }
- running = 0;
+ running = 0;
}
Monitor *
-recttomon(int x, int y, int w, int h)
-{
- Monitor *m, *r = selmon;
- int a, area = 0;
+recttomon(int x, int y, int w, int h) {
+ Monitor *m, *r = selmon;
+ int a, area = 0;
- for (m = mons; m; m = m->next)
- if ((a = INTERSECT(x, y, w, h, m)) > area) {
- area = a;
- r = m;
- }
- return r;
+ for (m = mons; m; m = m->next)
+ if ((a = INTERSECT(x, y, w, h, m)) > area) {
+ area = a;
+ r = m;
+ }
+ return r;
}
void
-removesystrayicon(Client *i)
-{
- Client **ii;
+removesystrayicon(Client *i) {
+ Client **ii;
- if (!showsystray || !i)
- return;
- for (ii = &systray->icons; *ii && *ii != i; ii = &(*ii)->next);
- if (ii)
- *ii = i->next;
- free(i);
+ if (!showsystray || !i)
+ return;
+ for (ii = &systray->icons; *ii && *ii != i; ii = &(*ii)->next);
+ if (ii)
+ *ii = i->next;
+ free(i);
}
void
-resize(Client *c, int x, int y, int w, int h, int interact)
-{
- if (applysizehints(c, &x, &y, &w, &h, interact))
- resizeclient(c, x, y, w, h);
+resize(Client *c, int x, int y, int w, int h, int interact) {
+ if (applysizehints(c, &x, &y, &w, &h, interact))
+ resizeclient(c, x, y, w, h);
}
void
resizebarwin(Monitor *m) {
- unsigned int w = m->ww;
- if (showsystray && m == systraytomon(m) && !systrayonleft)
- w -= getsystraywidth();
- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, w, bh);
+ unsigned int w = m->ww;
+ if (showsystray && m == systraytomon(m) && !systrayonleft)
+ w -= getsystraywidth();
+ XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, w, bh);
}
void
-resizeclient(Client *c, int x, int y, int w, int h)
-{
- XWindowChanges wc;
+resizeclient(Client *c, int x, int y, int w, int h) {
+ XWindowChanges wc;
- c->oldx = c->x; c->x = wc.x = x;
- c->oldy = c->y; c->y = wc.y = y;
- c->oldw = c->w; c->w = wc.width = w;
- c->oldh = c->h; c->h = wc.height = h;
- wc.border_width = c->bw;
- if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next))
- || &monocle == c->mon->lt[c->mon->sellt]->arrange)
- && !c->isfullscreen && !c->isfloating
- && NULL != c->mon->lt[c->mon->sellt]->arrange) {
- c->w = wc.width += c->bw * 2;
- c->h = wc.height += c->bw * 2;
- wc.border_width = 0;
- }
- XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
- configure(c);
- XSync(dpy, False);
+ c->oldx = c->x;
+ c->x = wc.x = x;
+ c->oldy = c->y;
+ c->y = wc.y = y;
+ c->oldw = c->w;
+ c->w = wc.width = w;
+ c->oldh = c->h;
+ c->h = wc.height = h;
+ wc.border_width = c->bw;
+ if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next))
+ || &monocle == c->mon->lt[c->mon->sellt]->arrange)
+ && !c->isfullscreen && !c->isfloating
+ && NULL != c->mon->lt[c->mon->sellt]->arrange) {
+ c->w = wc.width += c->bw * 2;
+ c->h = wc.height += c->bw * 2;
+ wc.border_width = 0;
+ }
+ XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc);
+ configure(c);
+ XSync(dpy, False);
}
void
-resizemouse(const Arg *arg)
-{
- int ocx, ocy, nw, nh;
- Client *c;
- Monitor *m;
- XEvent ev;
- Time lasttime = 0;
+resizemouse(const Arg *arg) {
+ int ocx, ocy, nw, nh;
+ Client *c;
+ Monitor *m;
+ XEvent ev;
+ Time lasttime = 0;
- if (!(c = selmon->sel))
- return;
- if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */
- return;
- restack(selmon);
- ocx = c->x;
- ocy = c->y;
- if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
- None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess)
- return;
- XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
- do {
- XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);
- switch(ev.type) {
- case ConfigureRequest:
- case Expose:
- case MapRequest:
- handler[ev.type](&ev);
- break;
- case MotionNotify:
- if ((ev.xmotion.time - lasttime) <= (1000 / 60))
- continue;
- lasttime = ev.xmotion.time;
+ if (!(c = selmon->sel))
+ return;
+ if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */
+ return;
+ restack(selmon);
+ ocx = c->x;
+ ocy = c->y;
+ if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
+ None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess)
+ return;
+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
+ do {
+ XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev);
+ switch (ev.type) {
+ case ConfigureRequest:
+ case Expose:
+ case MapRequest:
+ handler[ev.type](&ev);
+ break;
+ case MotionNotify:
+ if ((ev.xmotion.time - lasttime) <= (1000 / 60))
+ continue;
+ lasttime = ev.xmotion.time;
- nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
- nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
- if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
- && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh)
- {
- if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
- && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
- togglefloating(NULL);
- }
- if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
- resize(c, c->x, c->y, nw, nh, 1);
- break;
- }
- } while (ev.type != ButtonRelease);
- XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
- XUngrabPointer(dpy, CurrentTime);
- while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
- if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
- sendmon(c, m);
- selmon = m;
- focus(NULL);
- }
+ nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1);
+ nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1);
+ if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww
+ && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) {
+ if (!c->isfloating && selmon->lt[selmon->sellt]->arrange
+ && (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
+ togglefloating(NULL);
+ }
+ if (!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+ resize(c, c->x, c->y, nw, nh, 1);
+ break;
+ }
+ } while (ev.type != ButtonRelease);
+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);
+ XUngrabPointer(dpy, CurrentTime);
+ while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+ if ((m = recttomon(c->x, c->y, c->w, c->h)) != selmon) {
+ sendmon(c, m);
+ selmon = m;
+ focus(NULL);
+ }
}
void
-resizerequest(XEvent *e)
-{
- XResizeRequestEvent *ev = &e->xresizerequest;
- Client *i;
+resizerequest(XEvent *e) {
+ XResizeRequestEvent *ev = &e->xresizerequest;
+ Client *i;
- if ((i = wintosystrayicon(ev->window))) {
- updatesystrayicongeom(i, ev->width, ev->height);
- resizebarwin(selmon);
- updatesystray();
- }
+ if ((i = wintosystrayicon(ev->window))) {
+ updatesystrayicongeom(i, ev->width, ev->height);
+ resizebarwin(selmon);
+ updatesystray();
+ }
}
void
-restack(Monitor *m)
-{
- Client *c;
- XEvent ev;
- XWindowChanges wc;
+restack(Monitor *m) {
+ Client *c;
+ XEvent ev;
+ XWindowChanges wc;
- drawbar(m);
- if (!m->sel)
- return;
- if (m->sel->isfloating || !m->lt[m->sellt]->arrange)
- XRaiseWindow(dpy, m->sel->win);
- if (m->lt[m->sellt]->arrange) {
- wc.stack_mode = Below;
- wc.sibling = m->barwin;
- for (c = m->stack; c; c = c->snext)
- if (!c->isfloating && ISVISIBLE(c)) {
- XConfigureWindow(dpy, c->win, CWSibling|CWStackMode, &wc);
- wc.sibling = c->win;
- }
- }
- XSync(dpy, False);
- while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+ drawbar(m);
+ if (!m->sel)
+ return;
+ if (m->sel->isfloating || !m->lt[m->sellt]->arrange)
+ XRaiseWindow(dpy, m->sel->win);
+ if (m->lt[m->sellt]->arrange) {
+ wc.stack_mode = Below;
+ wc.sibling = m->barwin;
+ for (c = m->stack; c; c = c->snext)
+ if (!c->isfloating && ISVISIBLE(c)) {
+ XConfigureWindow(dpy, c->win, CWSibling | CWStackMode, &wc);
+ wc.sibling = c->win;
+ }
+ }
+ XSync(dpy, False);
+ while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
}
void
-run(void)
-{
- XEvent ev;
- /* main event loop */
- XSync(dpy, False);
- while (running && !XNextEvent(dpy, &ev))
- if (handler[ev.type])
- handler[ev.type](&ev); /* call handler */
+run(void) {
+ XEvent ev;
+ /* main event loop */
+ XSync(dpy, False);
+ while (running && !XNextEvent(dpy, &ev))
+ if (handler[ev.type])
+ handler[ev.type](&ev); /* call handler */
}
void
-scan(void)
-{
- unsigned int i, num;
- Window d1, d2, *wins = NULL;
- XWindowAttributes wa;
+scan(void) {
+ unsigned int i, num;
+ Window d1, d2, *wins = NULL;
+ XWindowAttributes wa;
- if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
- for (i = 0; i < num; i++) {
- if (!XGetWindowAttributes(dpy, wins[i], &wa)
- || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
- continue;
- if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
- manage(wins[i], &wa);
- }
- for (i = 0; i < num; i++) { /* now the transients */
- if (!XGetWindowAttributes(dpy, wins[i], &wa))
- continue;
- if (XGetTransientForHint(dpy, wins[i], &d1)
- && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
- manage(wins[i], &wa);
- }
- if (wins)
- XFree(wins);
- }
+ if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) {
+ for (i = 0; i < num; i++) {
+ if (!XGetWindowAttributes(dpy, wins[i], &wa)
+ || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1))
+ continue;
+ if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)
+ manage(wins[i], &wa);
+ }
+ for (i = 0; i < num; i++) { /* now the transients */
+ if (!XGetWindowAttributes(dpy, wins[i], &wa))
+ continue;
+ if (XGetTransientForHint(dpy, wins[i], &d1)
+ && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState))
+ manage(wins[i], &wa);
+ }
+ if (wins)
+ XFree(wins);
+ }
}
void
-sendmon(Client *c, Monitor *m)
-{
- if (c->mon == m)
- return;
- unfocus(c, 1);
- detach(c);
- detachstack(c);
- c->mon = m;
- c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
- attach(c);
- attachstack(c);
- focus(NULL);
- arrange(NULL);
+sendmon(Client *c, Monitor *m) {
+ if (c->mon == m)
+ return;
+ unfocus(c, 1);
+ detach(c);
+ detachstack(c);
+ c->mon = m;
+ c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
+ attach(c);
+ attachstack(c);
+ focus(NULL);
+ arrange(NULL);
}
void
-setclientstate(Client *c, long state)
-{
- long data[] = { state, None };
+setclientstate(Client *c, long state) {
+ long data[] = {state, None};
- XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
- PropModeReplace, (unsigned char *)data, 2);
+ XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,
+ PropModeReplace, (unsigned char *) data, 2);
}
int
-sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4)
-{
- int n;
- Atom *protocols, mt;
- int exists = 0;
- XEvent ev;
+sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4) {
+ int n;
+ Atom *protocols, mt;
+ int exists = 0;
+ XEvent ev;
- if (proto == wmatom[WMTakeFocus] || proto == wmatom[WMDelete]) {
- mt = wmatom[WMProtocols];
- if (XGetWMProtocols(dpy, w, &protocols, &n)) {
- while (!exists && n--)
- exists = protocols[n] == proto;
- XFree(protocols);
- }
- }
- else {
- exists = True;
- mt = proto;
+ if (proto == wmatom[WMTakeFocus] || proto == wmatom[WMDelete]) {
+ mt = wmatom[WMProtocols];
+ if (XGetWMProtocols(dpy, w, &protocols, &n)) {
+ while (!exists && n--)
+ exists = protocols[n] == proto;
+ XFree(protocols);
+ }
+ } else {
+ exists = True;
+ mt = proto;
}
- if (exists) {
- ev.type = ClientMessage;
- ev.xclient.window = w;
- ev.xclient.message_type = mt;
- ev.xclient.format = 32;
- ev.xclient.data.l[0] = d0;
- ev.xclient.data.l[1] = d1;
- ev.xclient.data.l[2] = d2;
- ev.xclient.data.l[3] = d3;
- ev.xclient.data.l[4] = d4;
- XSendEvent(dpy, w, False, mask, &ev);
- }
- return exists;
+ if (exists) {
+ ev.type = ClientMessage;
+ ev.xclient.window = w;
+ ev.xclient.message_type = mt;
+ ev.xclient.format = 32;
+ ev.xclient.data.l[0] = d0;
+ ev.xclient.data.l[1] = d1;
+ ev.xclient.data.l[2] = d2;
+ ev.xclient.data.l[3] = d3;
+ ev.xclient.data.l[4] = d4;
+ XSendEvent(dpy, w, False, mask, &ev);
+ }
+ return exists;
}
void
-setfocus(Client *c)
-{
- if (!c->neverfocus) {
- XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
- XChangeProperty(dpy, root, netatom[NetActiveWindow],
- XA_WINDOW, 32, PropModeReplace,
- (unsigned char *) &(c->win), 1);
- }
- sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocus], CurrentTime, 0, 0, 0);
+setfocus(Client *c) {
+ if (!c->neverfocus) {
+ XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
+ XChangeProperty(dpy, root, netatom[NetActiveWindow],
+ XA_WINDOW, 32, PropModeReplace,
+ (unsigned char *) &(c->win), 1);
+ }
+ sendevent(c->win, wmatom[WMTakeFocus], NoEventMask, wmatom[WMTakeFocus], CurrentTime, 0, 0, 0);
}
void
-setfullscreen(Client *c, int fullscreen)
-{
- if (fullscreen && !c->isfullscreen) {
- XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
- PropModeReplace, (unsigned char*)&netatom[NetWMFullscreen], 1);
- c->isfullscreen = 1;
- c->oldstate = c->isfloating;
- c->oldbw = c->bw;
- c->bw = 0;
- c->isfloating = 1;
- resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
- XRaiseWindow(dpy, c->win);
- } else if (!fullscreen && c->isfullscreen){
- XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
- PropModeReplace, (unsigned char*)0, 0);
- c->isfullscreen = 0;
- c->isfloating = c->oldstate;
- c->bw = c->oldbw;
- c->x = c->oldx;
- c->y = c->oldy;
- c->w = c->oldw;
- c->h = c->oldh;
- resizeclient(c, c->x, c->y, c->w, c->h);
- arrange(c->mon);
- }
+setfullscreen(Client *c, int fullscreen) {
+ if (fullscreen && !c->isfullscreen) {
+ XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
+ PropModeReplace, (unsigned char *) &netatom[NetWMFullscreen], 1);
+ c->isfullscreen = 1;
+ c->oldstate = c->isfloating;
+ c->oldbw = c->bw;
+ c->bw = 0;
+ c->isfloating = 1;
+ resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
+ XRaiseWindow(dpy, c->win);
+ } else if (!fullscreen && c->isfullscreen) {
+ XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
+ PropModeReplace, (unsigned char *) 0, 0);
+ c->isfullscreen = 0;
+ c->isfloating = c->oldstate;
+ c->bw = c->oldbw;
+ c->x = c->oldx;
+ c->y = c->oldy;
+ c->w = c->oldw;
+ c->h = c->oldh;
+ resizeclient(c, c->x, c->y, c->w, c->h);
+ arrange(c->mon);
+ }
}
Layout *last_layout;
+
void
-fullscreen(const Arg *arg)
-{
- if (selmon->showbar) {
- for(last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++);
- setlayout(&((Arg) { .v = &layouts[2] }));
- } else {
- setlayout(&((Arg) { .v = last_layout }));
- }
- togglebar(arg);
+fullscreen(const Arg *arg) {
+ if (selmon->showbar) {
+ for (last_layout = (Layout *) layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++);
+ setlayout(&((Arg) {.v = &layouts[2]}));
+ } else {
+ setlayout(&((Arg) {.v = last_layout}));
+ }
+ togglebar(arg);
}
void
-setlayout(const Arg *arg)
-{
- if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
- selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1;
- if (arg && arg->v)
- selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v;
- strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
- if (selmon->sel)
- arrange(selmon);
- else
- drawbar(selmon);
+setlayout(const Arg *arg) {
+ if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt])
+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1;
+ if (arg && arg->v)
+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *) arg->v;
+ strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
+ if (selmon->sel)
+ arrange(selmon);
+ else
+ drawbar(selmon);
}
/* arg > 1.0 will set mfact absolutely */
void
-setmfact(const Arg *arg)
-{
- float f;
+setmfact(const Arg *arg) {
+ float f;
- if (!arg || !selmon->lt[selmon->sellt]->arrange)
- return;
- f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
- if (f < 0.05 || f > 0.95)
- return;
- selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f;
- arrange(selmon);
+ if (!arg || !selmon->lt[selmon->sellt]->arrange)
+ return;
+ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
+ if (f < 0.05 || f > 0.95)
+ return;
+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f;
+ arrange(selmon);
}
void
-setup(void)
-{
- int i;
- XSetWindowAttributes wa;
- Atom utf8string;
+setup(void) {
+ int i;
+ XSetWindowAttributes wa;
+ Atom utf8string;
- /* clean up any zombies immediately */
- sigchld(0);
+ /* clean up any zombies immediately */
+ sigchld(0);
- /* init screen */
- screen = DefaultScreen(dpy);
- sw = DisplayWidth(dpy, screen);
- sh = DisplayHeight(dpy, screen);
- root = RootWindow(dpy, screen);
- drw = drw_create(dpy, screen, root, sw, sh);
- if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
- die("no fonts could be loaded.");
- lrpad = drw->fonts->h;
- bh = drw->fonts->h + 2;
- updategeom();
- /* init atoms */
- utf8string = XInternAtom(dpy, "UTF8_STRING", False);
- wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
- wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
- wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
- wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
- netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
- netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
- netatom[NetSystemTray] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_S0", False);
- netatom[NetSystemTrayOP] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE", False);
- netatom[NetSystemTrayOrientation] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION", False);
- netatom[NetSystemTrayOrientationHorz] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION_HORZ", False);
+ /* init screen */
+ screen = DefaultScreen(dpy);
+ sw = DisplayWidth(dpy, screen);
+ sh = DisplayHeight(dpy, screen);
+ root = RootWindow(dpy, screen);
+ drw = drw_create(dpy, screen, root, sw, sh);
+ if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
+ die("no fonts could be loaded.");
+ lrpad = drw->fonts->h;
+ bh = drw->fonts->h + 2;
+ updategeom();
+ /* init atoms */
+ utf8string = XInternAtom(dpy, "UTF8_STRING", False);
+ wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
+ wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
+ wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
+ wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
+ netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
+ netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
+ netatom[NetSystemTray] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_S0", False);
+ netatom[NetSystemTrayOP] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE", False);
+ netatom[NetSystemTrayOrientation] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION", False);
+ netatom[NetSystemTrayOrientationHorz] = XInternAtom(dpy, "_NET_SYSTEM_TRAY_ORIENTATION_HORZ", False);
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
- netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
- netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
- netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
- netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
- netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
- netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
- xatom[Manager] = XInternAtom(dpy, "MANAGER", False);
- xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False);
- xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False);
+ netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
+ netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
+ netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
+ netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
+ netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
+ netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
+ xatom[Manager] = XInternAtom(dpy, "MANAGER", False);
+ xatom[Xembed] = XInternAtom(dpy, "_XEMBED", False);
+ xatom[XembedInfo] = XInternAtom(dpy, "_XEMBED_INFO", False);
/* init cursors */
- cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
- cursor[CurResize] = drw_cur_create(drw, XC_sizing);
- cursor[CurMove] = drw_cur_create(drw, XC_fleur);
- /* init appearance */
- scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
- for (i = 0; i < LENGTH(colors); i++)
- scheme[i] = drw_scm_create(drw, colors[i], 3);
- /* init system tray */
- updatesystray();
- /* init bars */
- updatebars();
- updatestatus();
- /* supporting window for NetWMCheck */
- wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0);
- XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32,
- PropModeReplace, (unsigned char *) &wmcheckwin, 1);
- XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8,
- PropModeReplace, (unsigned char *) "dwm", 3);
- XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32,
- PropModeReplace, (unsigned char *) &wmcheckwin, 1);
- /* EWMH support per view */
- XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
- PropModeReplace, (unsigned char *) netatom, NetLast);
- XDeleteProperty(dpy, root, netatom[NetClientList]);
- /* select events */
- wa.cursor = cursor[CurNormal]->cursor;
- wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask
- |ButtonPressMask|PointerMotionMask|EnterWindowMask
- |LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
- XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
- XSelectInput(dpy, root, wa.event_mask);
- grabkeys();
- focus(NULL);
+ cursor[CurNormal] = drw_cur_create(drw, XC_left_ptr);
+ cursor[CurResize] = drw_cur_create(drw, XC_sizing);
+ cursor[CurMove] = drw_cur_create(drw, XC_fleur);
+ /* init appearance */
+ scheme = ecalloc(LENGTH(colors), sizeof(Clr *));
+ for (i = 0; i < LENGTH(colors); i++)
+ scheme[i] = drw_scm_create(drw, colors[i], 3);
+ /* init system tray */
+ updatesystray();
+ /* init bars */
+ updatebars();
+ updatestatus();
+ /* supporting window for NetWMCheck */
+ wmcheckwin = XCreateSimpleWindow(dpy, root, 0, 0, 1, 1, 0, 0, 0);
+ XChangeProperty(dpy, wmcheckwin, netatom[NetWMCheck], XA_WINDOW, 32,
+ PropModeReplace, (unsigned char *) &wmcheckwin, 1);
+ XChangeProperty(dpy, wmcheckwin, netatom[NetWMName], utf8string, 8,
+ PropModeReplace, (unsigned char *) "dwm", 3);
+ XChangeProperty(dpy, root, netatom[NetWMCheck], XA_WINDOW, 32,
+ PropModeReplace, (unsigned char *) &wmcheckwin, 1);
+ /* EWMH support per view */
+ XChangeProperty(dpy, root, netatom[NetSupported], XA_ATOM, 32,
+ PropModeReplace, (unsigned char *) netatom, NetLast);
+ XDeleteProperty(dpy, root, netatom[NetClientList]);
+ /* select events */
+ wa.cursor = cursor[CurNormal]->cursor;
+ wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
+ | ButtonPressMask | PointerMotionMask | EnterWindowMask
+ | LeaveWindowMask | StructureNotifyMask | PropertyChangeMask;
+ XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
+ XSelectInput(dpy, root, wa.event_mask);
+ grabkeys();
+ focus(NULL);
}
void
-seturgent(Client *c, int urg)
-{
- XWMHints *wmh;
+seturgent(Client *c, int urg) {
+ XWMHints *wmh;
- c->isurgent = urg;
- if (!(wmh = XGetWMHints(dpy, c->win)))
- return;
- wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint);
- XSetWMHints(dpy, c->win, wmh);
- XFree(wmh);
+ c->isurgent = urg;
+ if (!(wmh = XGetWMHints(dpy, c->win)))
+ return;
+ wmh->flags = urg ? (wmh->flags | XUrgencyHint) : (wmh->flags & ~XUrgencyHint);
+ XSetWMHints(dpy, c->win, wmh);
+ XFree(wmh);
}
void
-showhide(Client *c)
-{
- if (!c)
- return;
- if (ISVISIBLE(c)) {
- /* show clients top down */
- XMoveWindow(dpy, c->win, c->x, c->y);
- if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
- resize(c, c->x, c->y, c->w, c->h, 0);
- showhide(c->snext);
- } else {
- /* hide clients bottom up */
- showhide(c->snext);
- XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y);
- }
+showhide(Client *c) {
+ if (!c)
+ return;
+ if (ISVISIBLE(c)) {
+ /* show clients top down */
+ XMoveWindow(dpy, c->win, c->x, c->y);
+ if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
+ resize(c, c->x, c->y, c->w, c->h, 0);
+ showhide(c->snext);
+ } else {
+ /* hide clients bottom up */
+ showhide(c->snext);
+ XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y);
+ }
}
void
-sigchld(int unused)
-{
- pid_t pid;
+sigchld(int unused) {
+ pid_t pid;
- if (signal(SIGCHLD, sigchld) == SIG_ERR)
- die("can't install SIGCHLD handler:");
- while (0 < (pid = waitpid(-1, NULL, WNOHANG))) {
- pid_t *p, *lim;
+ if (signal(SIGCHLD, sigchld) == SIG_ERR)
+ die("can't install SIGCHLD handler:");
+ while (0 < (pid = waitpid(-1, NULL, WNOHANG))) {
+ pid_t *p, *lim;
- if (!(p = autostart_pids))
- continue;
- lim = &p[autostart_len];
+ if (!(p = autostart_pids))
+ continue;
+ lim = &p[autostart_len];
- for (; p < lim; p++) {
- if (*p == pid) {
- *p = -1;
- break;
- }
- }
+ for (; p < lim; p++) {
+ if (*p == pid) {
+ *p = -1;
+ break;
+ }
+ }
- }
+ }
}
void
-spawn(const Arg *arg)
-{
- if (arg->v == dmenucmd)
- dmenumon[0] = '0' + selmon->num;
- if (fork() == 0) {
- if (dpy)
- close(ConnectionNumber(dpy));
- setsid();
- execvp(((char **)arg->v)[0], (char **)arg->v);
- fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
- perror(" failed");
- exit(EXIT_SUCCESS);
- }
+spawn(const Arg *arg) {
+ if (arg->v == dmenucmd)
+ dmenumon[0] = '0' + selmon->num;
+ if (fork() == 0) {
+ if (dpy)
+ close(ConnectionNumber(dpy));
+ setsid();
+ execvp(((char **) arg->v)[0], (char **) arg->v);
+ fprintf(stderr, "dwm: execvp %s", ((char **) arg->v)[0]);
+ perror(" failed");
+ exit(EXIT_SUCCESS);
+ }
}
void
-tag(const Arg *arg)
-{
- if (selmon->sel && arg->ui & TAGMASK) {
- selmon->sel->tags = arg->ui & TAGMASK;
- focus(NULL);
- arrange(selmon);
- }
+tag(const Arg *arg) {
+ if (selmon->sel && arg->ui & TAGMASK) {
+ selmon->sel->tags = arg->ui & TAGMASK;
+ focus(NULL);
+ arrange(selmon);
+ }
}
void
-tagmon(const Arg *arg)
-{
- if (!selmon->sel || !mons->next)
- return;
- sendmon(selmon->sel, dirtomon(arg->i));
+tagmon(const Arg *arg) {
+ if (!selmon->sel || !mons->next)
+ return;
+ sendmon(selmon->sel, dirtomon(arg->i));
}
void
-togglebar(const Arg *arg)
-{
- selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar;
- updatebarpos(selmon);
- resizebarwin(selmon);
- if (showsystray) {
- XWindowChanges wc;
- if (!selmon->showbar)
- wc.y = -bh;
- else if (selmon->showbar) {
- wc.y = 0;
- if (!selmon->topbar)
- wc.y = selmon->mh - bh;
- }
- XConfigureWindow(dpy, systray->win, CWY, &wc);
- }
- arrange(selmon);
+togglebar(const Arg *arg) {
+ selmon->showbar = selmon->pertag->showbars[selmon->pertag->curtag] = !selmon->showbar;
+ updatebarpos(selmon);
+ resizebarwin(selmon);
+ if (showsystray) {
+ XWindowChanges wc;
+ if (!selmon->showbar)
+ wc.y = -bh;
+ else if (selmon->showbar) {
+ wc.y = 0;
+ if (!selmon->topbar)
+ wc.y = selmon->mh - bh;
+ }
+ XConfigureWindow(dpy, systray->win, CWY, &wc);
+ }
+ arrange(selmon);
}
void
-togglefloating(const Arg *arg)
-{
- if (!selmon->sel)
- return;
- if (selmon->sel->isfullscreen) /* no support for fullscreen windows */
- return;
- selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
- if (selmon->sel->isfloating)
- resize(selmon->sel, selmon->sel->x, selmon->sel->y,
- selmon->sel->w, selmon->sel->h, 0);
- arrange(selmon);
+togglefloating(const Arg *arg) {
+ if (!selmon->sel)
+ return;
+ if (selmon->sel->isfullscreen) /* no support for fullscreen windows */
+ return;
+ selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isfixed;
+ if (selmon->sel->isfloating)
+ resize(selmon->sel, selmon->sel->x, selmon->sel->y,
+ selmon->sel->w, selmon->sel->h, 0);
+ arrange(selmon);
}
void
-togglesticky(const Arg *arg)
-{
- if (!selmon->sel)
- return;
- selmon->sel->issticky = !selmon->sel->issticky;
- arrange(selmon);
+togglesticky(const Arg *arg) {
+ if (!selmon->sel)
+ return;
+ selmon->sel->issticky = !selmon->sel->issticky;
+ arrange(selmon);
}
void
-toggletag(const Arg *arg)
-{
- unsigned int newtags;
+toggletag(const Arg *arg) {
+ unsigned int newtags;
- if (!selmon->sel)
- return;
- newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
- if (newtags) {
- selmon->sel->tags = newtags;
- focus(NULL);
- arrange(selmon);
- }
+ if (!selmon->sel)
+ return;
+ newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
+ if (newtags) {
+ selmon->sel->tags = newtags;
+ focus(NULL);
+ arrange(selmon);
+ }
}
void
-toggleview(const Arg *arg)
-{
- unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
- int i;
+toggleview(const Arg *arg) {
+ unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
+ int i;
- if (newtagset) {
- selmon->tagset[selmon->seltags] = newtagset;
+ if (newtagset) {
+ selmon->tagset[selmon->seltags] = newtagset;
- if (newtagset == ~0) {
- selmon->pertag->prevtag = selmon->pertag->curtag;
- selmon->pertag->curtag = 0;
- }
+ if (newtagset == ~0) {
+ selmon->pertag->prevtag = selmon->pertag->curtag;
+ selmon->pertag->curtag = 0;
+ }
- /* test if the user did not select the same tag */
- if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) {
- selmon->pertag->prevtag = selmon->pertag->curtag;
- for (i = 0; !(newtagset & 1 << i); i++) ;
- selmon->pertag->curtag = i + 1;
- }
+ /* test if the user did not select the same tag */
+ if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) {
+ selmon->pertag->prevtag = selmon->pertag->curtag;
+ for (i = 0; !(newtagset & 1 << i); i++);
+ selmon->pertag->curtag = i + 1;
+ }
- /* apply settings for this view */
- selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
- selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
- selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
- selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
- selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
+ /* apply settings for this view */
+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
+ selmon->lt[selmon->sellt ^ 1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt ^ 1];
- if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
- togglebar(NULL);
+ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
+ togglebar(NULL);
- focus(NULL);
- arrange(selmon);
- }
+ focus(NULL);
+ arrange(selmon);
+ }
}
void
-unfocus(Client *c, int setfocus)
-{
- if (!c)
- return;
- grabbuttons(c, 0);
- XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
- if (setfocus) {
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
- }
+unfocus(Client *c, int setfocus) {
+ if (!c)
+ return;
+ grabbuttons(c, 0);
+ XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBorder].pixel);
+ if (setfocus) {
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+ }
}
void
-unmanage(Client *c, int destroyed)
-{
- Monitor *m = c->mon;
- XWindowChanges wc;
+unmanage(Client *c, int destroyed) {
+ Monitor *m = c->mon;
+ XWindowChanges wc;
- detach(c);
- detachstack(c);
- if (!destroyed) {
- wc.border_width = c->oldbw;
- XGrabServer(dpy); /* avoid race conditions */
- XSetErrorHandler(xerrordummy);
- XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
- XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
- setclientstate(c, WithdrawnState);
- XSync(dpy, False);
- XSetErrorHandler(xerror);
- XUngrabServer(dpy);
- }
- free(c);
- focus(NULL);
- updateclientlist();
- arrange(m);
+ detach(c);
+ detachstack(c);
+ if (!destroyed) {
+ wc.border_width = c->oldbw;
+ XGrabServer(dpy); /* avoid race conditions */
+ XSetErrorHandler(xerrordummy);
+ XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */
+ XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
+ setclientstate(c, WithdrawnState);
+ XSync(dpy, False);
+ XSetErrorHandler(xerror);
+ XUngrabServer(dpy);
+ }
+ free(c);
+ focus(NULL);
+ updateclientlist();
+ arrange(m);
}
void
-unmapnotify(XEvent *e)
-{
- Client *c;
- XUnmapEvent *ev = &e->xunmap;
+unmapnotify(XEvent *e) {
+ Client *c;
+ XUnmapEvent *ev = &e->xunmap;
- if ((c = wintoclient(ev->window))) {
- if (ev->send_event)
- setclientstate(c, WithdrawnState);
- else
- unmanage(c, 0);
- }
- else if ((c = wintosystrayicon(ev->window))) {
- /* KLUDGE! sometimes icons occasionally unmap their windows, but do
- * _not_ destroy them. We map those windows back */
- XMapRaised(dpy, c->win);
- updatesystray();
- }
+ if ((c = wintoclient(ev->window))) {
+ if (ev->send_event)
+ setclientstate(c, WithdrawnState);
+ else
+ unmanage(c, 0);
+ } else if ((c = wintosystrayicon(ev->window))) {
+ /* KLUDGE! sometimes icons occasionally unmap their windows, but do
+ * _not_ destroy them. We map those windows back */
+ XMapRaised(dpy, c->win);
+ updatesystray();
+ }
}
void
-updatebars(void)
-{
- unsigned int w;
- Monitor *m;
- XSetWindowAttributes wa = {
- .override_redirect = True,
- .background_pixmap = ParentRelative,
- .event_mask = ButtonPressMask|ExposureMask
- };
- XClassHint ch = {"dwm", "dwm"};
- for (m = mons; m; m = m->next) {
- if (m->barwin)
- continue;
- w = m->ww;
- if (showsystray && m == systraytomon(m))
- w -= getsystraywidth();
- m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, DefaultDepth(dpy, screen),
- CopyFromParent, DefaultVisual(dpy, screen),
- CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
- XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
- if (showsystray && m == systraytomon(m))
- XMapRaised(dpy, systray->win);
- XMapRaised(dpy, m->barwin);
- XSetClassHint(dpy, m->barwin, &ch);
- }
+updatebars(void) {
+ unsigned int w;
+ Monitor *m;
+ XSetWindowAttributes wa = {
+ .override_redirect = True,
+ .background_pixmap = ParentRelative,
+ .event_mask = ButtonPressMask | ExposureMask
+ };
+ XClassHint ch = {"dwm", "dwm"};
+ for (m = mons; m; m = m->next) {
+ if (m->barwin)
+ continue;
+ w = m->ww;
+ if (showsystray && m == systraytomon(m))
+ w -= getsystraywidth();
+ m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, DefaultDepth(dpy, screen),
+ CopyFromParent, DefaultVisual(dpy, screen),
+ CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
+ XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
+ if (showsystray && m == systraytomon(m))
+ XMapRaised(dpy, systray->win);
+ XMapRaised(dpy, m->barwin);
+ XSetClassHint(dpy, m->barwin, &ch);
+ }
}
void
-updatebarpos(Monitor *m)
-{
- m->wy = m->my;
- m->wh = m->mh;
- if (m->showbar) {
- m->wh -= bh;
- m->by = m->topbar ? m->wy : m->wy + m->wh;
- m->wy = m->topbar ? m->wy + bh : m->wy;
- } else
- m->by = -bh;
+updatebarpos(Monitor *m) {
+ m->wy = m->my;
+ m->wh = m->mh;
+ if (m->showbar) {
+ m->wh -= bh;
+ m->by = m->topbar ? m->wy : m->wy + m->wh;
+ m->wy = m->topbar ? m->wy + bh : m->wy;
+ } else
+ m->by = -bh;
}
void
-updateclientlist()
-{
- Client *c;
- Monitor *m;
+updateclientlist() {
+ Client *c;
+ Monitor *m;
- XDeleteProperty(dpy, root, netatom[NetClientList]);
- for (m = mons; m; m = m->next)
- for (c = m->clients; c; c = c->next)
- XChangeProperty(dpy, root, netatom[NetClientList],
- XA_WINDOW, 32, PropModeAppend,
- (unsigned char *) &(c->win), 1);
+ XDeleteProperty(dpy, root, netatom[NetClientList]);
+ for (m = mons; m; m = m->next)
+ for (c = m->clients; c; c = c->next)
+ XChangeProperty(dpy, root, netatom[NetClientList],
+ XA_WINDOW, 32, PropModeAppend,
+ (unsigned char *) &(c->win), 1);
}
int
-updategeom(void)
-{
- int dirty = 0;
+updategeom(void) {
+ int dirty = 0;
#ifdef XINERAMA
- if (XineramaIsActive(dpy)) {
- int i, j, n, nn;
- Client *c;
- Monitor *m;
- XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
- XineramaScreenInfo *unique = NULL;
+ if (XineramaIsActive(dpy)) {
+ int i, j, n, nn;
+ Client *c;
+ Monitor *m;
+ XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
+ XineramaScreenInfo *unique = NULL;
- for (n = 0, m = mons; m; m = m->next, n++);
- /* only consider unique geometries as separate screens */
- unique = ecalloc(nn, sizeof(XineramaScreenInfo));
- for (i = 0, j = 0; i < nn; i++)
- if (isuniquegeom(unique, j, &info[i]))
- memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
- XFree(info);
- nn = j;
+ for (n = 0, m = mons; m; m = m->next, n++);
+ /* only consider unique geometries as separate screens */
+ unique = ecalloc(nn, sizeof(XineramaScreenInfo));
+ for (i = 0, j = 0; i < nn; i++)
+ if (isuniquegeom(unique, j, &info[i]))
+ memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));
+ XFree(info);
+ nn = j;
- /* new monitors if nn > n */
- for (i = n; i < nn; i++) {
- for (m = mons; m && m->next; m = m->next);
- if (m)
- m->next = createmon();
- else
- mons = createmon();
- }
- for (i = 0, m = mons; i < nn && m; m = m->next, i++)
- if (i >= n
- || unique[i].x_org != m->mx || unique[i].y_org != m->my
- || unique[i].width != m->mw || unique[i].height != m->mh)
- {
- dirty = 1;
- m->num = i;
- m->mx = m->wx = unique[i].x_org;
- m->my = m->wy = unique[i].y_org;
- m->mw = m->ww = unique[i].width;
- m->mh = m->wh = unique[i].height;
- updatebarpos(m);
- }
- /* removed monitors if n > nn */
- for (i = nn; i < n; i++) {
- for (m = mons; m && m->next; m = m->next);
- while ((c = m->clients)) {
- dirty = 1;
- m->clients = c->next;
- detachstack(c);
- c->mon = mons;
- attach(c);
- attachstack(c);
- }
- if (m == selmon)
- selmon = mons;
- cleanupmon(m);
- }
- free(unique);
- } else
+ /* new monitors if nn > n */
+ for (i = n; i < nn; i++) {
+ for (m = mons; m && m->next; m = m->next);
+ if (m)
+ m->next = createmon();
+ else
+ mons = createmon();
+ }
+ for (i = 0, m = mons; i < nn && m; m = m->next, i++)
+ if (i >= n
+ || unique[i].x_org != m->mx || unique[i].y_org != m->my
+ || unique[i].width != m->mw || unique[i].height != m->mh)
+ {
+ dirty = 1;
+ m->num = i;
+ m->mx = m->wx = unique[i].x_org;
+ m->my = m->wy = unique[i].y_org;
+ m->mw = m->ww = unique[i].width;
+ m->mh = m->wh = unique[i].height;
+ updatebarpos(m);
+ }
+ /* removed monitors if n > nn */
+ for (i = nn; i < n; i++) {
+ for (m = mons; m && m->next; m = m->next);
+ while ((c = m->clients)) {
+ dirty = 1;
+ m->clients = c->next;
+ detachstack(c);
+ c->mon = mons;
+ attach(c);
+ attachstack(c);
+ }
+ if (m == selmon)
+ selmon = mons;
+ cleanupmon(m);
+ }
+ free(unique);
+ } else
#endif /* XINERAMA */
- { /* default monitor setup */
- if (!mons)
- mons = createmon();
- if (mons->mw != sw || mons->mh != sh) {
- dirty = 1;
- mons->mw = mons->ww = sw;
- mons->mh = mons->wh = sh;
- updatebarpos(mons);
- }
- }
- if (dirty) {
- selmon = mons;
- selmon = wintomon(root);
- }
- return dirty;
+ { /* default monitor setup */
+ if (!mons)
+ mons = createmon();
+ if (mons->mw != sw || mons->mh != sh) {
+ dirty = 1;
+ mons->mw = mons->ww = sw;
+ mons->mh = mons->wh = sh;
+ updatebarpos(mons);
+ }
+ }
+ if (dirty) {
+ selmon = mons;
+ selmon = wintomon(root);
+ }
+ return dirty;
}
void
-updatenumlockmask(void)
-{
- unsigned int i, j;
- XModifierKeymap *modmap;
+updatenumlockmask(void) {
+ unsigned int i, j;
+ XModifierKeymap *modmap;
- numlockmask = 0;
- modmap = XGetModifierMapping(dpy);
- for (i = 0; i < 8; i++)
- for (j = 0; j < modmap->max_keypermod; j++)
- if (modmap->modifiermap[i * modmap->max_keypermod + j]
- == XKeysymToKeycode(dpy, XK_Num_Lock))
- numlockmask = (1 << i);
- XFreeModifiermap(modmap);
+ numlockmask = 0;
+ modmap = XGetModifierMapping(dpy);
+ for (i = 0; i < 8; i++)
+ for (j = 0; j < modmap->max_keypermod; j++)
+ if (modmap->modifiermap[i * modmap->max_keypermod + j]
+ == XKeysymToKeycode(dpy, XK_Num_Lock))
+ numlockmask = (1 << i);
+ XFreeModifiermap(modmap);
}
void
-updatesizehints(Client *c)
-{
- long msize;
- XSizeHints size;
+updatesizehints(Client *c) {
+ long msize;
+ XSizeHints size;
- if (!XGetWMNormalHints(dpy, c->win, &size, &msize))
- /* size is uninitialized, ensure that size.flags aren't used */
- size.flags = PSize;
- if (size.flags & PBaseSize) {
- c->basew = size.base_width;
- c->baseh = size.base_height;
- } else if (size.flags & PMinSize) {
- c->basew = size.min_width;
- c->baseh = size.min_height;
- } else
- c->basew = c->baseh = 0;
- if (size.flags & PResizeInc) {
- c->incw = size.width_inc;
- c->inch = size.height_inc;
- } else
- c->incw = c->inch = 0;
- if (size.flags & PMaxSize) {
- c->maxw = size.max_width;
- c->maxh = size.max_height;
- } else
- c->maxw = c->maxh = 0;
- if (size.flags & PMinSize) {
- c->minw = size.min_width;
- c->minh = size.min_height;
- } else if (size.flags & PBaseSize) {
- c->minw = size.base_width;
- c->minh = size.base_height;
- } else
- c->minw = c->minh = 0;
- if (size.flags & PAspect) {
- c->mina = (float)size.min_aspect.y / size.min_aspect.x;
- c->maxa = (float)size.max_aspect.x / size.max_aspect.y;
- } else
- c->maxa = c->mina = 0.0;
- c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh);
- c->hintsvalid = 1;
+ if (!XGetWMNormalHints(dpy, c->win, &size, &msize))
+ /* size is uninitialized, ensure that size.flags aren't used */
+ size.flags = PSize;
+ if (size.flags & PBaseSize) {
+ c->basew = size.base_width;
+ c->baseh = size.base_height;
+ } else if (size.flags & PMinSize) {
+ c->basew = size.min_width;
+ c->baseh = size.min_height;
+ } else
+ c->basew = c->baseh = 0;
+ if (size.flags & PResizeInc) {
+ c->incw = size.width_inc;
+ c->inch = size.height_inc;
+ } else
+ c->incw = c->inch = 0;
+ if (size.flags & PMaxSize) {
+ c->maxw = size.max_width;
+ c->maxh = size.max_height;
+ } else
+ c->maxw = c->maxh = 0;
+ if (size.flags & PMinSize) {
+ c->minw = size.min_width;
+ c->minh = size.min_height;
+ } else if (size.flags & PBaseSize) {
+ c->minw = size.base_width;
+ c->minh = size.base_height;
+ } else
+ c->minw = c->minh = 0;
+ if (size.flags & PAspect) {
+ c->mina = (float) size.min_aspect.y / size.min_aspect.x;
+ c->maxa = (float) size.max_aspect.x / size.max_aspect.y;
+ } else
+ c->maxa = c->mina = 0.0;
+ c->isfixed = (c->maxw && c->maxh && c->maxw == c->minw && c->maxh == c->minh);
+ c->hintsvalid = 1;
}
void
-updatestatus(void)
-{
- if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
- strcpy(stext, "dwm-"VERSION);
- drawbar(selmon);
- updatesystray();
+updatestatus(void) {
+ if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext)))
+ strcpy(stext, "dwm-"
+ VERSION);
+ drawbar(selmon);
+ updatesystray();
}
void
-updatesystrayicongeom(Client *i, int w, int h)
-{
- if (i) {
- i->h = bh;
- if (w == h)
- i->w = bh;
- else if (h == bh)
- i->w = w;
- else
- i->w = (int) ((float)bh * ((float)w / (float)h));
- applysizehints(i, &(i->x), &(i->y), &(i->w), &(i->h), False);
- /* force icons into the systray dimensions if they don't want to */
- if (i->h > bh) {
- if (i->w == i->h)
- i->w = bh;
- else
- i->w = (int) ((float)bh * ((float)i->w / (float)i->h));
- i->h = bh;
- }
- }
+updatesystrayicongeom(Client *i, int w, int h) {
+ if (i) {
+ i->h = bh;
+ if (w == h)
+ i->w = bh;
+ else if (h == bh)
+ i->w = w;
+ else
+ i->w = (int) ((float) bh * ((float) w / (float) h));
+ applysizehints(i, &(i->x), &(i->y), &(i->w), &(i->h), False);
+ /* force icons into the systray dimensions if they don't want to */
+ if (i->h > bh) {
+ if (i->w == i->h)
+ i->w = bh;
+ else
+ i->w = (int) ((float) bh * ((float) i->w / (float) i->h));
+ i->h = bh;
+ }
+ }
}
void
-updatesystrayiconstate(Client *i, XPropertyEvent *ev)
-{
- long flags;
- int code = 0;
+updatesystrayiconstate(Client *i, XPropertyEvent *ev) {
+ long flags;
+ int code = 0;
- if (!showsystray || !i || ev->atom != xatom[XembedInfo] ||
- !(flags = getatomprop(i, xatom[XembedInfo])))
- return;
+ if (!showsystray || !i || ev->atom != xatom[XembedInfo] ||
+ !(flags = getatomprop(i, xatom[XembedInfo])))
+ return;
- if (flags & XEMBED_MAPPED && !i->tags) {
- i->tags = 1;
- code = XEMBED_WINDOW_ACTIVATE;
- XMapRaised(dpy, i->win);
- setclientstate(i, NormalState);
- }
- else if (!(flags & XEMBED_MAPPED) && i->tags) {
- i->tags = 0;
- code = XEMBED_WINDOW_DEACTIVATE;
- XUnmapWindow(dpy, i->win);
- setclientstate(i, WithdrawnState);
- }
- else
- return;
- sendevent(i->win, xatom[Xembed], StructureNotifyMask, CurrentTime, code, 0,
- systray->win, XEMBED_EMBEDDED_VERSION);
+ if (flags & XEMBED_MAPPED && !i->tags) {
+ i->tags = 1;
+ code = XEMBED_WINDOW_ACTIVATE;
+ XMapRaised(dpy, i->win);
+ setclientstate(i, NormalState);
+ } else if (!(flags & XEMBED_MAPPED) && i->tags) {
+ i->tags = 0;
+ code = XEMBED_WINDOW_DEACTIVATE;
+ XUnmapWindow(dpy, i->win);
+ setclientstate(i, WithdrawnState);
+ } else
+ return;
+ sendevent(i->win, xatom[Xembed], StructureNotifyMask, CurrentTime, code, 0,
+ systray->win, XEMBED_EMBEDDED_VERSION);
}
void
-updatesystray(void)
-{
- XSetWindowAttributes wa;
- XWindowChanges wc;
- Client *i;
- Monitor *m = systraytomon(NULL);
- unsigned int x = m->mx + m->mw;
- unsigned int sw = TEXTW(stext) - lrpad + systrayspacing;
- unsigned int w = 1;
+updatesystray(void) {
+ XSetWindowAttributes wa;
+ XWindowChanges wc;
+ Client *i;
+ Monitor *m = systraytomon(NULL);
+ unsigned int x = m->mx + m->mw;
+ unsigned int sw = TEXTW(stext) - lrpad + systrayspacing;
+ unsigned int w = 1;
- if (!showsystray)
- return;
- if (systrayonleft)
- x -= sw + lrpad / 2;
- if (!systray) {
- /* init systray */
- if (!(systray = (Systray *)calloc(1, sizeof(Systray))))
- die("fatal: could not malloc() %u bytes\n", sizeof(Systray));
- systray->win = XCreateSimpleWindow(dpy, root, x, m->by, w, bh, 0, 0, scheme[SchemeSel][ColBg].pixel);
- wa.event_mask = ButtonPressMask | ExposureMask;
- wa.override_redirect = True;
- wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
- XSelectInput(dpy, systray->win, SubstructureNotifyMask);
- XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrientation], XA_CARDINAL, 32,
- PropModeReplace, (unsigned char *)&netatom[NetSystemTrayOrientationHorz], 1);
- XChangeWindowAttributes(dpy, systray->win, CWEventMask|CWOverrideRedirect|CWBackPixel, &wa);
- XMapRaised(dpy, systray->win);
- XSetSelectionOwner(dpy, netatom[NetSystemTray], systray->win, CurrentTime);
- if (XGetSelectionOwner(dpy, netatom[NetSystemTray]) == systray->win) {
- sendevent(root, xatom[Manager], StructureNotifyMask, CurrentTime, netatom[NetSystemTray], systray->win, 0, 0);
- XSync(dpy, False);
- }
- else {
- fprintf(stderr, "dwm: unable to obtain system tray.\n");
- free(systray);
- systray = NULL;
- return;
- }
- }
- for (w = 0, i = systray->icons; i; i = i->next) {
- /* make sure the background color stays the same */
- wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
- XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa);
- XMapRaised(dpy, i->win);
- w += systrayspacing;
- i->x = w;
- XMoveResizeWindow(dpy, i->win, i->x, 0, i->w, i->h);
- w += i->w;
- if (i->mon != m)
- i->mon = m;
- }
- w = w ? w + systrayspacing : 1;
- x -= w;
- XMoveResizeWindow(dpy, systray->win, x, m->by, w, bh);
- wc.x = x; wc.y = m->by; wc.width = w; wc.height = bh;
- wc.stack_mode = Above; wc.sibling = m->barwin;
- XConfigureWindow(dpy, systray->win, CWX|CWY|CWWidth|CWHeight|CWSibling|CWStackMode, &wc);
- XMapWindow(dpy, systray->win);
- XMapSubwindows(dpy, systray->win);
- /* redraw background */
- XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
- XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
- XSync(dpy, False);
+ if (!showsystray)
+ return;
+ if (systrayonleft)
+ x -= sw + lrpad / 2;
+ if (!systray) {
+ /* init systray */
+ if (!(systray = (Systray *) calloc(1, sizeof(Systray))))
+ die("fatal: could not malloc() %u bytes\n", sizeof(Systray));
+ systray->win = XCreateSimpleWindow(dpy, root, x, m->by, w, bh, 0, 0, scheme[SchemeSel][ColBg].pixel);
+ wa.event_mask = ButtonPressMask | ExposureMask;
+ wa.override_redirect = True;
+ wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
+ XSelectInput(dpy, systray->win, SubstructureNotifyMask);
+ XChangeProperty(dpy, systray->win, netatom[NetSystemTrayOrientation], XA_CARDINAL, 32,
+ PropModeReplace, (unsigned char *) &netatom[NetSystemTrayOrientationHorz], 1);
+ XChangeWindowAttributes(dpy, systray->win, CWEventMask | CWOverrideRedirect | CWBackPixel, &wa);
+ XMapRaised(dpy, systray->win);
+ XSetSelectionOwner(dpy, netatom[NetSystemTray], systray->win, CurrentTime);
+ if (XGetSelectionOwner(dpy, netatom[NetSystemTray]) == systray->win) {
+ sendevent(root, xatom[Manager], StructureNotifyMask, CurrentTime, netatom[NetSystemTray], systray->win, 0,
+ 0);
+ XSync(dpy, False);
+ } else {
+ fprintf(stderr, "dwm: unable to obtain system tray.\n");
+ free(systray);
+ systray = NULL;
+ return;
+ }
+ }
+ for (w = 0, i = systray->icons; i; i = i->next) {
+ /* make sure the background color stays the same */
+ wa.background_pixel = scheme[SchemeNorm][ColBg].pixel;
+ XChangeWindowAttributes(dpy, i->win, CWBackPixel, &wa);
+ XMapRaised(dpy, i->win);
+ w += systrayspacing;
+ i->x = w;
+ XMoveResizeWindow(dpy, i->win, i->x, 0, i->w, i->h);
+ w += i->w;
+ if (i->mon != m)
+ i->mon = m;
+ }
+ w = w ? w + systrayspacing : 1;
+ x -= w;
+ XMoveResizeWindow(dpy, systray->win, x, m->by, w, bh);
+ wc.x = x;
+ wc.y = m->by;
+ wc.width = w;
+ wc.height = bh;
+ wc.stack_mode = Above;
+ wc.sibling = m->barwin;
+ XConfigureWindow(dpy, systray->win, CWX | CWY | CWWidth | CWHeight | CWSibling | CWStackMode, &wc);
+ XMapWindow(dpy, systray->win);
+ XMapSubwindows(dpy, systray->win);
+ /* redraw background */
+ XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel);
+ XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh);
+ XSync(dpy, False);
}
void
-updatetitle(Client *c)
-{
- if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
- gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
- if (c->name[0] == '\0') /* hack to mark broken clients */
- strcpy(c->name, broken);
+updatetitle(Client *c) {
+ if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name))
+ gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name);
+ if (c->name[0] == '\0') /* hack to mark broken clients */
+ strcpy(c->name, broken);
}
void
-updatewindowtype(Client *c)
-{
- Atom state = getatomprop(c, netatom[NetWMState]);
- Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
+updatewindowtype(Client *c) {
+ Atom state = getatomprop(c, netatom[NetWMState]);
+ Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
- if (state == netatom[NetWMFullscreen])
- setfullscreen(c, 1);
- if (wtype == netatom[NetWMWindowTypeDialog])
- c->isfloating = 1;
+ if (state == netatom[NetWMFullscreen])
+ setfullscreen(c, 1);
+ if (wtype == netatom[NetWMWindowTypeDialog])
+ c->isfloating = 1;
}
void
-updatewmhints(Client *c)
-{
- XWMHints *wmh;
+updatewmhints(Client *c) {
+ XWMHints *wmh;
- if ((wmh = XGetWMHints(dpy, c->win))) {
- if (c == selmon->sel && wmh->flags & XUrgencyHint) {
- wmh->flags &= ~XUrgencyHint;
- XSetWMHints(dpy, c->win, wmh);
- } else
- c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
- if (wmh->flags & InputHint)
- c->neverfocus = !wmh->input;
- else
- c->neverfocus = 0;
- XFree(wmh);
- }
+ if ((wmh = XGetWMHints(dpy, c->win))) {
+ if (c == selmon->sel && wmh->flags & XUrgencyHint) {
+ wmh->flags &= ~XUrgencyHint;
+ XSetWMHints(dpy, c->win, wmh);
+ } else
+ c->isurgent = (wmh->flags & XUrgencyHint) ? 1 : 0;
+ if (wmh->flags & InputHint)
+ c->neverfocus = !wmh->input;
+ else
+ c->neverfocus = 0;
+ XFree(wmh);
+ }
}
void
-view(const Arg *arg)
-{
- int i;
- unsigned int tmptag;
+view(const Arg *arg) {
+ int i;
+ unsigned int tmptag;
- if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
- return;
- selmon->seltags ^= 1; /* toggle sel tagset */
- if (arg->ui & TAGMASK) {
- selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
- selmon->pertag->prevtag = selmon->pertag->curtag;
+ if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+ return;
+ selmon->seltags ^= 1; /* toggle sel tagset */
+ if (arg->ui & TAGMASK) {
+ selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+ selmon->pertag->prevtag = selmon->pertag->curtag;
- if (arg->ui == ~0)
- selmon->pertag->curtag = 0;
- else {
- for (i = 0; !(arg->ui & 1 << i); i++) ;
- selmon->pertag->curtag = i + 1;
- }
- } else {
- tmptag = selmon->pertag->prevtag;
- selmon->pertag->prevtag = selmon->pertag->curtag;
- selmon->pertag->curtag = tmptag;
- }
+ if (arg->ui == ~0)
+ selmon->pertag->curtag = 0;
+ else {
+ for (i = 0; !(arg->ui & 1 << i); i++);
+ selmon->pertag->curtag = i + 1;
+ }
+ } else {
+ tmptag = selmon->pertag->prevtag;
+ selmon->pertag->prevtag = selmon->pertag->curtag;
+ selmon->pertag->curtag = tmptag;
+ }
- selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
- selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
- selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
- selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
- selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1];
+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag];
+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag];
+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag];
+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt];
+ selmon->lt[selmon->sellt ^ 1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt ^ 1];
- if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
- togglebar(NULL);
+ if (selmon->showbar != selmon->pertag->showbars[selmon->pertag->curtag])
+ togglebar(NULL);
- focus(NULL);
- arrange(selmon);
+ focus(NULL);
+ arrange(selmon);
}
Client *
-wintoclient(Window w)
-{
- Client *c;
- Monitor *m;
+wintoclient(Window w) {
+ Client *c;
+ Monitor *m;
- for (m = mons; m; m = m->next)
- for (c = m->clients; c; c = c->next)
- if (c->win == w)
- return c;
- return NULL;
+ for (m = mons; m; m = m->next)
+ for (c = m->clients; c; c = c->next)
+ if (c->win == w)
+ return c;
+ return NULL;
}
Client *
wintosystrayicon(Window w) {
- Client *i = NULL;
+ Client *i = NULL;
- if (!showsystray || !w)
- return i;
- for (i = systray->icons; i && i->win != w; i = i->next) ;
- return i;
+ if (!showsystray || !w)
+ return i;
+ for (i = systray->icons; i && i->win != w; i = i->next);
+ return i;
}
Monitor *
-wintomon(Window w)
-{
- int x, y;
- Client *c;
- Monitor *m;
+wintomon(Window w) {
+ int x, y;
+ Client *c;
+ Monitor *m;
- if (w == root && getrootptr(&x, &y))
- return recttomon(x, y, 1, 1);
- for (m = mons; m; m = m->next)
- if (w == m->barwin)
- return m;
- if ((c = wintoclient(w)))
- return c->mon;
- return selmon;
+ if (w == root && getrootptr(&x, &y))
+ return recttomon(x, y, 1, 1);
+ for (m = mons; m; m = m->next)
+ if (w == m->barwin)
+ return m;
+ if ((c = wintoclient(w)))
+ return c->mon;
+ return selmon;
}
/* There's no way to check accesses to destroyed windows, thus those cases are
* ignored (especially on UnmapNotify's). Other types of errors call Xlibs
* default error handler, which may call exit. */
int
-xerror(Display *dpy, XErrorEvent *ee)
-{
- if (ee->error_code == BadWindow
- || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
- || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
- || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
- || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
- || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
- || (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
- || (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
- || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
- return 0;
- fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
- ee->request_code, ee->error_code);
- return xerrorxlib(dpy, ee); /* may call exit */
+xerror(Display *dpy, XErrorEvent *ee) {
+ if (ee->error_code == BadWindow
+ || (ee->request_code == X_SetInputFocus && ee->error_code == BadMatch)
+ || (ee->request_code == X_PolyText8 && ee->error_code == BadDrawable)
+ || (ee->request_code == X_PolyFillRectangle && ee->error_code == BadDrawable)
+ || (ee->request_code == X_PolySegment && ee->error_code == BadDrawable)
+ || (ee->request_code == X_ConfigureWindow && ee->error_code == BadMatch)
+ || (ee->request_code == X_GrabButton && ee->error_code == BadAccess)
+ || (ee->request_code == X_GrabKey && ee->error_code == BadAccess)
+ || (ee->request_code == X_CopyArea && ee->error_code == BadDrawable))
+ return 0;
+ fprintf(stderr, "dwm: fatal error: request code=%d, error code=%d\n",
+ ee->request_code, ee->error_code);
+ return xerrorxlib(dpy, ee); /* may call exit */
}
int
-xerrordummy(Display *dpy, XErrorEvent *ee)
-{
- return 0;
+xerrordummy(Display *dpy, XErrorEvent *ee) {
+ return 0;
}
/* Startup Error handler to check if another window manager
* is already running. */
int
-xerrorstart(Display *dpy, XErrorEvent *ee)
-{
- die("dwm: another window manager is already running");
- return -1;
+xerrorstart(Display *dpy, XErrorEvent *ee) {
+ die("dwm: another window manager is already running");
+ return -1;
}
Monitor *
systraytomon(Monitor *m) {
- Monitor *t;
- int i, n;
- if(!systraypinning) {
- if(!m)
- return selmon;
- return m == selmon ? m : NULL;
- }
- for(n = 1, t = mons; t && t->next; n++, t = t->next) ;
- for(i = 1, t = mons; t && t->next && i < systraypinning; i++, t = t->next) ;
- if(systraypinningfailfirst && n < systraypinning)
- return mons;
- return t;
+ Monitor *t;
+ int i, n;
+ if (!systraypinning) {
+ if (!m)
+ return selmon;
+ return m == selmon ? m : NULL;
+ }
+ for (n = 1, t = mons; t && t->next; n++, t = t->next);
+ for (i = 1, t = mons; t && t->next && i < systraypinning; i++, t = t->next);
+ if (systraypinningfailfirst && n < systraypinning)
+ return mons;
+ return t;
}
void
-zoom(const Arg *arg)
-{
- Client *c = selmon->sel;
+zoom(const Arg *arg) {
+ Client *c = selmon->sel;
- if (!selmon->lt[selmon->sellt]->arrange
- || (selmon->sel && selmon->sel->isfloating))
- return;
- if (c == nexttiled(selmon->clients))
- if (!c || !(c = nexttiled(c->next)))
- return;
- pop(c);
+ if (!selmon->lt[selmon->sellt]->arrange
+ || (selmon->sel && selmon->sel->isfloating))
+ return;
+ if (c == nexttiled(selmon->clients))
+ if (!c || !(c = nexttiled(c->next)))
+ return;
+ pop(c);
}
int
-main(int argc, char *argv[])
-{
- if (argc == 2 && !strcmp("-v", argv[1]))
- die("dwm-"VERSION);
- else if (argc != 1)
- die("usage: dwm [-v]");
- if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
- fputs("warning: no locale support\n", stderr);
- if (!(dpy = XOpenDisplay(NULL)))
- die("dwm: cannot open display");
- checkotherwm();
- autostart_exec();
- setup();
+main(int argc, char *argv[]) {
+ if (argc == 2 && !strcmp("-v", argv[1]))
+ die("dwm-"
+ VERSION);
+ else if (argc != 1)
+ die("usage: dwm [-v]");
+ if (!setlocale(LC_CTYPE, "") || !XSupportsLocale())
+ fputs("warning: no locale support\n", stderr);
+ if (!(dpy = XOpenDisplay(NULL)))
+ die("dwm: cannot open display");
+ checkotherwm();
+ autostart_exec();
+ setup();
#ifdef __OpenBSD__
- if (pledge("stdio rpath proc exec", NULL) == -1)
- die("pledge");
+ if (pledge("stdio rpath proc exec", NULL) == -1)
+ die("pledge");
#endif /* __OpenBSD__ */
- scan();
- run();
- cleanup();
- XCloseDisplay(dpy);
- return EXIT_SUCCESS;
+ scan();
+ run();
+ cleanup();
+ XCloseDisplay(dpy);
+ return EXIT_SUCCESS;
}
diff --git a/src/dwm.h b/src/dwm.h
new file mode 100644
index 0000000..b8baaf9
--- /dev/null
+++ b/src/dwm.h
@@ -0,0 +1,272 @@
+//
+// Created by anas on 10/31/22.
+//
+
+#ifndef DWM_H
+#define DWM_H
+
+/* enums */
+enum {
+ CurNormal, CurResize, CurMove, CurLast
+}; /* cursor */
+enum {
+ SchemeNorm, SchemeSel, SchemeUrg
+}; /* color schemes */
+enum {
+ NetSupported, NetWMName, NetWMState, NetWMCheck,
+ NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz,
+ NetWMFullscreen, NetActiveWindow, NetWMWindowType,
+ NetWMWindowTypeDialog, NetClientList, NetLast
+}; /* EWMH atoms */
+enum {
+ Manager, Xembed, XembedInfo, XLast
+}; /* Xembed atoms */
+enum {
+ WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast
+}; /* default atoms */
+
+typedef union {
+ int i;
+ unsigned int ui;
+ float f;
+ const void *v;
+} Arg;
+
+typedef struct Monitor Monitor;
+typedef struct Client Client;
+struct Client {
+ char name[256];
+ float mina, maxa;
+ int x, y, w, h;
+ int oldx, oldy, oldw, oldh;
+ int basew, baseh, incw, inch, maxw, maxh, minw, minh, hintsvalid;
+ int bw, oldbw;
+ unsigned int tags;
+ int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, issticky;
+ Client *next;
+ Client *snext;
+ Monitor *mon;
+ Window win;
+};
+
+
+typedef struct {
+ const char *symbol;
+
+ void (*arrange)(Monitor *);
+} Layout;
+
+typedef struct Pertag Pertag;
+struct Monitor {
+ char ltsymbol[16];
+ float mfact;
+ int nmaster;
+ int num;
+ int by; /* bar geometry */
+ int mx, my, mw, mh; /* screen size */
+ int wx, wy, ww, wh; /* window area */
+ unsigned int seltags;
+ unsigned int sellt;
+ unsigned int tagset[2];
+ int showbar;
+ int topbar;
+ Client *clients;
+ Client *sel;
+ Client *stack;
+ Monitor *next;
+ Window barwin;
+ const Layout *lt[2];
+ Pertag *pertag;
+};
+
+typedef struct {
+ const char *class;
+ const char *instance;
+ const char *title;
+ unsigned int tags;
+ int isfloating;
+ int monitor;
+} Rule;
+
+typedef struct Systray Systray;
+struct Systray {
+ Window win;
+ Client *icons;
+};
+
+/* function declarations */
+static void applyrules(Client *c);
+
+static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
+
+static void arrange(Monitor *m);
+
+static void arrangemon(Monitor *m);
+
+static void attach(Client *c);
+
+static void attachstack(Client *c);
+
+static void buttonpress(XEvent *e);
+
+static void checkotherwm(void);
+
+static void cleanup(void);
+
+static void cleanupmon(Monitor *mon);
+
+static void clientmessage(XEvent *e);
+
+static void configure(Client *c);
+
+static void configurenotify(XEvent *e);
+
+static void configurerequest(XEvent *e);
+
+static Monitor *createmon(void);
+
+static void destroynotify(XEvent *e);
+
+static void detach(Client *c);
+
+static void detachstack(Client *c);
+
+static Monitor *dirtomon(int dir);
+
+static void drawbar(Monitor *m);
+
+static void drawbars(void);
+
+static void enternotify(XEvent *e);
+
+static void expose(XEvent *e);
+
+static void focus(Client *c);
+
+static void focusin(XEvent *e);
+
+static Atom getatomprop(Client *c, Atom prop);
+
+static int getrootptr(int *x, int *y);
+
+static long getstate(Window w);
+
+static unsigned int getsystraywidth();
+
+static int gettextprop(Window w, Atom atom, char *text, unsigned int size);
+
+static void grabbuttons(Client *c, int focused);
+
+static void grabkeys(void);
+
+static void keypress(XEvent *e);
+
+static void manage(Window w, XWindowAttributes *wa);
+
+static void mappingnotify(XEvent *e);
+
+static void maprequest(XEvent *e);
+
+static void monocle(Monitor *m);
+
+static void motionnotify(XEvent *e);
+
+static Client *nexttiled(Client *c);
+
+static void pop(Client *);
+
+static void propertynotify(XEvent *e);
+
+static Monitor *recttomon(int x, int y, int w, int h);
+
+static void removesystrayicon(Client *i);
+
+static void resize(Client *c, int x, int y, int w, int h, int interact);
+
+static void resizebarwin(Monitor *m);
+
+static void resizeclient(Client *c, int x, int y, int w, int h);
+
+static void resizemouse(const Arg *arg);
+
+static void resizerequest(XEvent *e);
+
+static void restack(Monitor *m);
+
+static void run(void);
+
+static void scan(void);
+
+static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4);
+
+static void sendmon(Client *c, Monitor *m);
+
+static void setclientstate(Client *c, long state);
+
+static void setfocus(Client *c);
+
+static void setfullscreen(Client *c, int fullscreen);
+
+static void setup(void);
+
+static void seturgent(Client *c, int urg);
+
+static void showhide(Client *c);
+
+static void sigchld(int unused);
+
+static Monitor *systraytomon(Monitor *m);
+
+static void tile(Monitor *);
+
+static void toggletag(const Arg *arg);
+
+static void toggleview(const Arg *arg);
+
+static void unfocus(Client *c, int setfocus);
+
+static void unmanage(Client *c, int destroyed);
+
+static void unmapnotify(XEvent *e);
+
+static void updatebarpos(Monitor *m);
+
+static void updatebars(void);
+
+static void updateclientlist(void);
+
+static int updategeom(void);
+
+static void updatenumlockmask(void);
+
+static void updatesizehints(Client *c);
+
+static void updatestatus(void);
+
+static void updatesystray(void);
+
+static void updatesystrayicongeom(Client *i, int w, int h);
+
+static void updatesystrayiconstate(Client *i, XPropertyEvent *ev);
+
+static void updatetitle(Client *c);
+
+static void updatewindowtype(Client *c);
+
+static void updatewmhints(Client *c);
+
+static Client *wintoclient(Window w);
+
+static Monitor *wintomon(Window w);
+
+static Client *wintosystrayicon(Window w);
+
+static int xerror(Display *dpy, XErrorEvent *ee);
+
+static int xerrordummy(Display *dpy, XErrorEvent *ee);
+
+static int xerrorstart(Display *dpy, XErrorEvent *ee);
+
+static void autostart_exec(void);
+
+#endif //DWM_H
diff --git a/src/keys/functions.h b/src/keys/functions.h
new file mode 100644
index 0000000..8eb2d7a
--- /dev/null
+++ b/src/keys/functions.h
@@ -0,0 +1,46 @@
+//
+// Created by anas on 10/31/22.
+//
+
+#ifndef FUNCTIONS_H
+#define FUNCTIONS_H
+
+#include "../dwm.h"
+
+static void spawn(const Arg *arg);
+
+static void focusmon(const Arg *arg);
+
+static void fullscreen(const Arg *arg);
+
+static void focusstack(const Arg *arg);
+
+static void tagmon(const Arg *arg);
+
+static void incnmaster(const Arg *arg);
+
+static void killclient(const Arg *arg);
+
+static void movemouse(const Arg *arg);
+
+static void togglebar(const Arg *arg);
+
+static void togglesticky(const Arg *arg);
+
+static void togglefloating(const Arg *arg);
+
+static void setmfact(const Arg *arg);
+
+static void view(const Arg *arg);
+
+static void movestack(const Arg *arg);
+
+static void setlayout(const Arg *arg);
+
+static void tag(const Arg *arg);
+
+static void zoom(const Arg *arg);
+
+static void quit(const Arg *arg);
+
+#endif //FUNCTIONS_H
diff --git a/src/keys/keys.c b/src/keys/keys.c
index 492f0aa..508b471 100644
--- a/src/keys/keys.c
+++ b/src/keys/keys.c
@@ -1,196 +1,170 @@
-/* helper for spawning shell commands in the pre dwm-5.0 fashion */
-#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
-/* commands */
-static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", norm_bg,
- "-nf", norm_fg, "-sb", sel_bg, "-sf", sel_fg, NULL };
-static const char *termcmd[] = { TERMINAL, NULL };
-
-/* key definitions */
-#define MODKEY Mod4Mask // win/super key
-
-#define TAGKEYS(CHAIN,KEY,TAG) \
- { MODKEY, CHAIN, KEY, view, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask, CHAIN, KEY, toggleview, {.ui = 1 << TAG} }, \
- { MODKEY|ShiftMask, CHAIN, KEY, tag, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask|ShiftMask, CHAIN, KEY, toggletag, {.ui = 1 << TAG} },
-
+#include "../config.h"
+#include "keys.h"
+#include "functions.h"
+#include "../layouts/layouts.h"
// X11 keysym definitions
#include // req (libxinerama1 and libxinerama-dev)
+
+#include
+
static Key keys[] = {
- /* modifier chain key key function argument */
- /* ---------------------------------- Apps Keys ---------------------------------- */
- // Dmenu (launcher)
- { MODKEY|ShiftMask, -1, XK_d, spawn, {.v = dmenucmd } },
- // Rofi launcher (small)
- { MODKEY|ShiftMask|ControlMask, -1, XK_d, spawn, SHCMD("rofi -show drun") },
- // Start the main terminal
- { MODKEY, -1, XK_Return, spawn, {.v = termcmd } },
+ /* modifier chain key key function argument */
+ /* ---------------------------------- Apps Keys ---------------------------------- */
+ // Dmenu (launcher)
+ {MODKEY | ShiftMask, -1, XK_d, spawn, {.v = dmenucmd}},
+ // Rofi launcher (small)
+ {MODKEY | ShiftMask | ControlMask, -1, XK_d, spawn, SHCMD("rofi -show drun")},
+ // Start the main terminal
+ {MODKEY, -1, XK_Return, spawn, {.v = termcmd}},
// Start the alacritty terminal
- { MODKEY, XK_t, XK_a, spawn, SHCMD("alacritty") },
- // Start the alacritty terminal with tmux
- // { MODKEY, XK_t, XK_a|ShiftMask, spawn, SHCMD("alacritty -e tmux") },
+ {MODKEY, XK_t, XK_a, spawn, SHCMD("alacritty")},
+ // Start the alacritty terminal with tmux
+ // { MODKEY, XK_t, XK_a|ShiftMask, spawn, SHCMD("alacritty -e tmux") },
// kitty
- { MODKEY, XK_t, XK_k, spawn, SHCMD("kitty") },
+ {MODKEY, XK_t, XK_k, spawn, SHCMD("kitty")},
// kitty with tmux
- // { MODKEY, XK_t, ShiftMask|XK_k, spawn, SHCMD("kitty -e tmux") },
- /************************************* File browsers *************************************/
+ // { MODKEY, XK_t, ShiftMask|XK_k, spawn, SHCMD("kitty -e tmux") },
+ /************************************* File browsers *************************************/
// GUI filebrowser
- { MODKEY|ShiftMask, XK_f, XK_g, spawn, SHCMD("~/.scripts/filebrowser") },
- // Rofi file browser (small)
- { MODKEY|ShiftMask, XK_f, XK_f, spawn, SHCMD("rofi -show filebrowser") },
+ {MODKEY | ShiftMask, XK_f, XK_g, spawn, SHCMD("~/.scripts/filebrowser")},
+ // Rofi file browser (small)
+ {MODKEY | ShiftMask, XK_f, XK_f, spawn, SHCMD("rofi -show filebrowser")},
// Terminal file manager (ranger)
- { MODKEY|ShiftMask, XK_f, XK_t, spawn, SHCMD(TERMINAL " -e ranger") },
- /************************************* Start the web browers *************************************/
+ {MODKEY | ShiftMask, XK_f, XK_t, spawn, SHCMD(TERMINAL " -e ranger")},
+ /************************************* Start the web browers *************************************/
// Google chrome stable
- { MODKEY, XK_w, XK_g, spawn, SHCMD("google-chrome-stable") },
- // Firefox-developer-edition
- { MODKEY, XK_w, XK_f, spawn, SHCMD("firefox-developer-edition") },
+ {MODKEY, XK_w, XK_g, spawn, SHCMD("google-chrome-stable")},
+ // Firefox-developer-edition
+ {MODKEY, XK_w, XK_f, spawn, SHCMD("firefox-developer-edition")},
// Tor brower
- { MODKEY, XK_w, XK_t, spawn, SHCMD("tor-browser") },
- /************************************* Start the caht/email/\* apps *************************************/
- // Discord
- { MODKEY, XK_c, XK_d, spawn, SHCMD("discord") },
+ {MODKEY, XK_w, XK_t, spawn, SHCMD("tor-browser")},
+ /************************************* Start the caht/email/\* apps *************************************/
+ // Discord
+ {MODKEY, XK_c, XK_d, spawn, SHCMD("discord")},
// Obsidian
- { MODKEY, XK_c, XK_o, spawn, SHCMD("obsidian") },
- /************************************* Start the dev apps *************************************/
- // Jetbrains toolbox
- { MODKEY, XK_a, XK_j, spawn, SHCMD("jetbrains-toolbox") },
+ {MODKEY, XK_c, XK_o, spawn, SHCMD("obsidian")},
+ /************************************* Start the dev apps *************************************/
+ // Jetbrains toolbox
+ {MODKEY, XK_a, XK_j, spawn, SHCMD("jetbrains-toolbox")},
// NeoVim
- { MODKEY, XK_a, XK_n, spawn, SHCMD(TERMINAL " -e nvim") },
+ {MODKEY, XK_a, XK_n, spawn, SHCMD(TERMINAL " -e nvim")},
// Vim
- { MODKEY, XK_a, XK_v, spawn, SHCMD(TERMINAL " -e vim") },
+ {MODKEY, XK_a, XK_v, spawn, SHCMD(TERMINAL " -e vim")},
// emacs
- { MODKEY, XK_a, XK_e, spawn, SHCMD("emacs") },
- /************************************* Start personalize apps *************************************/
+ {MODKEY, XK_a, XK_e, spawn, SHCMD("emacs")},
+ /************************************* Start personalize apps *************************************/
// nitrogen
- { MODKEY, XK_p, XK_b, spawn, SHCMD("nitrogen") },
+ {MODKEY, XK_p, XK_b, spawn, SHCMD("nitrogen")},
// nm-connection-editor
- { MODKEY, XK_p, XK_n, spawn, SHCMD("nm-connection-editor") },
- /************************************* Start multi media apps *************************************/
- { MODKEY, -1, XK_m, spawn, SHCMD("~/.scripts/luncher") },
- // cmus
+ {MODKEY, XK_p, XK_n, spawn, SHCMD("nm-connection-editor")},
+ /************************************* Start multi media apps *************************************/
+ {MODKEY, -1, XK_m, spawn, SHCMD("~/.scripts/luncher")},
+ // cmus
// { MODKEY, XK_m, XK_c, spawn, SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc-rs --link\"") },
// vlc
// { MODKEY, XK_m, XK_v, spawn, SHCMD("vlc") },
// vlc in the main terminal
// { MODKEY|ShiftMask, XK_m, XK_v, spawn, SHCMD(TERMINAL "nvlc") },
- /************************************* Start the emoji piker apps *************************************/
- // Emoji selector (rofi)
- { Mod4Mask, -1, XK_e, spawn, SHCMD("rofimoji") },
- /************************************* dwm keys *************************************/
- // Full screen mode
- { MODKEY, -1, XK_f, fullscreen, {0} },
- // Toggle the slstatus bar (hide/show)
- { MODKEY, -1, XK_b, togglebar, {0} },
+ /************************************* Start the emoji piker apps *************************************/
+ // Emoji selector (rofi)
+ {Mod4Mask, -1, XK_e, spawn, SHCMD("rofimoji")},
+ /************************************* dwm keys *************************************/
+ // Full screen mode
+ {MODKEY, -1, XK_f, fullscreen, {0}},
+ // Toggle the slstatus bar (hide/show)
+ {MODKEY, -1, XK_b, togglebar, {0}},
// Change the focus
- { MODKEY, -1, XK_j, focusstack, {.i = +1 } },
- { MODKEY, -1, XK_k, focusstack, {.i = -1 } },
+ {MODKEY, -1, XK_j, focusstack, {.i = +1}},
+ {MODKEY, -1, XK_k, focusstack, {.i = -1}},
// Change the stack layout (horizontal/virtecal)
- { MODKEY, -1, XK_i, incnmaster, {.i = +1 } },
- { MODKEY, -1, XK_d, incnmaster, {.i = -1 } },
+ {MODKEY, -1, XK_i, incnmaster, {.i = +1}},
+ {MODKEY, -1, XK_d, incnmaster, {.i = -1}},
// Change the focus window size (in the tile mode)
- { MODKEY, -1, XK_h, setmfact, {.f = -0.05} },
- { MODKEY, -1, XK_l, setmfact, {.f = +0.05} },
+ {MODKEY, -1, XK_h, setmfact, {.f = -0.05f}},
+ {MODKEY, -1, XK_l, setmfact, {.f = +0.05f}},
// { MODKEY, XK_Return, zoom, {0} },
- { MODKEY, -1, XK_Tab, view, {0} },
+ {MODKEY, -1, XK_Tab, view, {0}},
- { MODKEY|ShiftMask, -1, XK_j, movestack, {.i = +1 } },
- { MODKEY|ShiftMask, -1, XK_k, movestack, {.i = -1 } },
+ {MODKEY | ShiftMask, -1, XK_j, movestack, {.i = +1}},
+ {MODKEY | ShiftMask, -1, XK_k, movestack, {.i = -1}},
// Toogle styky mode
- { MODKEY|ShiftMask, -1, XK_s, togglesticky, {0} },
+ {MODKEY | ShiftMask, -1, XK_s, togglesticky, {0}},
- // Quit from the foucsed window (kill)
- { MODKEY, XK_q, XK_q, killclient, {0} },
+ // Quit from the foucsed window (kill)
+ {MODKEY, XK_q, XK_q, killclient, {0}},
/************************* Switch between layouts *************************/
- // Tiled layout
- { MODKEY, XK_s, XK_t, setlayout, {.v = &layouts[0]} },
- // Floating layout
- { MODKEY, XK_s, XK_f, setlayout, {.v = &layouts[1]} },
- // Monocle layout
- { MODKEY, XK_s, XK_m, setlayout, {.v = &layouts[2]} },
+ // Tiled layout
+ {MODKEY, XK_s, XK_t, setlayout, {.v = &layouts[0]}},
+ // Floating layout
+ {MODKEY, XK_s, XK_f, setlayout, {.v = &layouts[1]}},
+ // Monocle layout
+ {MODKEY, XK_s, XK_m, setlayout, {.v = &layouts[2]}},
// Grid layout
- { MODKEY, XK_s, XK_g, setlayout, {.v = &layouts[3]} },
+ {MODKEY, XK_s, XK_g, setlayout, {.v = &layouts[3]}},
// Spiral layout
- { MODKEY, XK_s, XK_r, setlayout, {.v = &layouts[4]} },
+ {MODKEY, XK_s, XK_r, setlayout, {.v = &layouts[4]}},
// Dwindle layout
- { MODKEY, XK_s, XK_d, setlayout, {.v = &layouts[5]} },
+ {MODKEY, XK_s, XK_d, setlayout, {.v = &layouts[5]}},
// Centerd master layout
- { MODKEY, XK_s, XK_c, setlayout, {.v = &layouts[6]} },
+ {MODKEY, XK_s, XK_c, setlayout, {.v = &layouts[6]}},
// Centerd floating master layout
- { MODKEY, XK_s, XK_x, setlayout, {.v = &layouts[7]} },
+ {MODKEY, XK_s, XK_x, setlayout, {.v = &layouts[7]}},
// Toggle between current layout and tile layout
- { MODKEY, XK_s, XK_s, setlayout, {0} },
+ {MODKEY, XK_s, XK_s, setlayout, {0}},
// Toggle floating window
- { MODKEY|Mod1Mask, -1, XK_f, togglefloating, {0} },
+ {MODKEY | Mod1Mask, -1, XK_f, togglefloating, {0}},
// View all tags
- { MODKEY, -1, XK_0, view, {.ui = ~0 } },
+ {MODKEY, -1, XK_0, view, {.ui = ~0}},
// Mirror the current tagg in all tags
- { MODKEY|ShiftMask, -1, XK_0, tag, {.ui = ~0 } },
+ {MODKEY | ShiftMask, -1, XK_0, tag, {.ui = ~0}},
// I don't know
- { MODKEY, -1, XK_comma, focusmon, {.i = -1 } },
- { MODKEY, -1, XK_period, focusmon, {.i = +1 } },
- { MODKEY|ShiftMask, -1, XK_comma, tagmon, {.i = -1 } },
- { MODKEY|ShiftMask, -1, XK_period, tagmon, {.i = +1 } },
+ {MODKEY, -1, XK_comma, focusmon, {.i = -1}},
+ {MODKEY, -1, XK_period, focusmon, {.i = +1}},
+ {MODKEY | ShiftMask, -1, XK_comma, tagmon, {.i = -1}},
+ {MODKEY | ShiftMask, -1, XK_period, tagmon, {.i = +1}},
/************************* Tag keys *************************/
- TAGKEYS( -1, XK_1, 0)
- TAGKEYS( -1, XK_2, 1)
- TAGKEYS( -1, XK_3, 2)
- TAGKEYS( -1, XK_4, 3)
- TAGKEYS( -1, XK_5, 4)
- TAGKEYS( -1, XK_6, 5)
- TAGKEYS( -1, XK_7, 6)
- TAGKEYS( -1, XK_8, 7)
- TAGKEYS( -1, XK_9, 8)
- TAGKEYS( -1, XK_semicolon, 9)
- /* ---------------------------------- Control Keys ---------------------------------- */
- // Brightness controllers (requires xbacklight)
- { 0, -1, XF86XK_MonBrightnessUp, spawn, SHCMD("~/.scripts/brightness up") },
- { 0, -1, XF86XK_MonBrightnessDown, spawn, SHCMD("~/.scripts/brightness down") },
- // Sound controllers (requires pamixer)
- { 0, -1, XF86XK_AudioRaiseVolume, spawn, SHCMD("~/.scripts/volume up") },
- { 0, -1, XF86XK_AudioLowerVolume, spawn, SHCMD("~/.scripts/volume down") },
- { 0, -1, XF86XK_AudioMute, spawn, SHCMD("~/.scripts/volume mute") },
- // Media controls (requires playerctl)
- { 0, -1, XF86XK_AudioPlay, spawn, SHCMD("playerctl play-pause") },
- { 0, -1, XF86XK_AudioStop, spawn, SHCMD("playerctl stop") },
- { 0, -1, XF86XK_AudioNext, spawn, SHCMD("playerctl next") },
- { 0, -1, XF86XK_AudioPrev, spawn, SHCMD("playerctl previous") },
+ TAGKEYS(-1, XK_1, 0)
+ TAGKEYS(-1, XK_2, 1)
+ TAGKEYS(-1, XK_3, 2)
+ TAGKEYS(-1, XK_4, 3)
+ TAGKEYS(-1, XK_5, 4)
+ TAGKEYS(-1, XK_6, 5)
+ TAGKEYS(-1, XK_7, 6)
+ TAGKEYS(-1, XK_8, 7)
+ TAGKEYS(-1, XK_9, 8)
+ TAGKEYS(-1, XK_semicolon, 9)
+ /* ---------------------------------- Control Keys ---------------------------------- */
+ // Brightness controllers (requires xbacklight)
+ {0, -1, XF86XK_MonBrightnessUp, spawn, SHCMD("~/.scripts/brightness up")},
+ {0, -1, XF86XK_MonBrightnessDown, spawn, SHCMD("~/.scripts/brightness down")},
+ // Sound controllers (requires pamixer)
+ {0, -1, XF86XK_AudioRaiseVolume, spawn, SHCMD("~/.scripts/volume up")},
+ {0, -1, XF86XK_AudioLowerVolume, spawn, SHCMD("~/.scripts/volume down")},
+ {0, -1, XF86XK_AudioMute, spawn, SHCMD("~/.scripts/volume mute")},
+ // Media controls (requires playerctl)
+ {0, -1, XF86XK_AudioPlay, spawn, SHCMD("playerctl play-pause")},
+ {0, -1, XF86XK_AudioStop, spawn, SHCMD("playerctl stop")},
+ {0, -1, XF86XK_AudioNext, spawn, SHCMD("playerctl next")},
+ {0, -1, XF86XK_AudioPrev, spawn, SHCMD("playerctl previous")},
- { Mod1Mask, -1, XK_F1, spawn, SHCMD("playerctl volume 0.0") },
- { Mod1Mask, -1, XK_F2, spawn, SHCMD("playerctl volume 0.1-") },
- { Mod1Mask, -1, XK_F3, spawn, SHCMD("playerctl volume 0.1+") },
+ {Mod1Mask, -1, XK_F1, spawn, SHCMD("playerctl volume 0.0")},
+ {Mod1Mask, -1, XK_F2, spawn, SHCMD("playerctl volume 0.1-")},
+ {Mod1Mask, -1, XK_F3, spawn, SHCMD("playerctl volume 0.1+")},
// Mute and unmute mic
- { 0, -1, XF86XK_AudioMicMute, spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
- // Take a screenshot
- { 0, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot") },
- { Mod1Mask, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot --region") },
- { Mod2Mask, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot --activewindow") },
- { Mod1Mask|Mod2Mask, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot --fullscreen --background --copy-image") },
- /* ---------------------------------- lock Keys ---------------------------------- */
- // Lock the screen
- { MODKEY|ShiftMask, -1, XK_x, spawn, SHCMD("betterlockscreen -l dim") },
- { 0, -1, XF86XK_Suspend, spawn, SHCMD("betterlockscreen -l dim") },
- // // Kill dwm (super + shift + alt + q)
- // { MODKEY|ShiftMask|Mod1Mask, -1, XK_q, quit, {0} },
+ {0, -1, XF86XK_AudioMicMute, spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle")},
+ // Take a screenshot
+ {0, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot")},
+ {Mod1Mask, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot --region")},
+ {Mod2Mask, -1, XK_Print, spawn, SHCMD("~/.scripts/screenshot --activewindow")},
+ {Mod1Mask | Mod2Mask, -1, XK_Print, spawn,
+ SHCMD("~/.scripts/screenshot --fullscreen --background --copy-image")},
+ /* ---------------------------------- lock Keys ---------------------------------- */
+ // Lock the screen
+ {MODKEY | ShiftMask, -1, XK_x, spawn, SHCMD("betterlockscreen -l dim")},
+ {0, -1, XF86XK_Suspend, spawn, SHCMD("betterlockscreen -l dim")},
+ // // Kill dwm (super + shift + alt + q)
+ // { MODKEY|ShiftMask|Mod1Mask, -1, XK_q, quit, {0} },
};
-/* button definitions */
-/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
-static Button buttons[] = {
- /* click event mask button function argument */
- { ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
- { ClkWinTitle, 0, Button2, zoom, {0} },
- { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
- { ClkClientWin, MODKEY, Button1, movemouse, {0} },
- { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
- { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
- { ClkTagBar, 0, Button1, view, {0} },
- { ClkTagBar, 0, Button3, toggleview, {0} },
- { ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
-};
diff --git a/src/keys/keys.c.orig b/src/keys/keys.c.orig
deleted file mode 100644
index ed0e3af..0000000
--- a/src/keys/keys.c.orig
+++ /dev/null
@@ -1,442 +0,0 @@
-/* helper for spawning shell commands in the pre dwm-5.0 fashion */
-#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
-
-/* commands */
-static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", norm_bg,
- "-nf", norm_fg, "-sb", sel_bg, "-sf", sel_fg, NULL };
-static const char *termcmd[] = { TERMINAL, NULL };
-
-/* key definitions */
-#define MODKEY Mod4Mask // win/super key
-
-#define TAGKEYS(KEY,TAG) \
- { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
- { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
- { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
-
-// X11 keysym definitions
-#include // req (libxinerama1 and libxinerama-dev)
-static Key keys[] = {
- /* modifier key function argument */
- /* ---------------------------------- Apps Keys ---------------------------------- */
- // Dmenu (launcher)
- { MODKEY|ShiftMask, XK_d, spawn, {.v = dmenucmd } },
- // Rofi launcher (small)
- { MODKEY|ShiftMask|ControlMask, XK_d, spawn, SHCMD("rofi -show drun") },
- // Start the main terminal
- { MODKEY, XK_Return, spawn, {.v = termcmd } },
- // Start the alacritty terminal
-<<<<<<< HEAD
-// {2, {{MODKEY, XK_t}, {0, XK_a}}, spawn, SHCMD("alacritty") },
-// // Start the alacritty terminal with tmux
-// {2, {{MODKEY, XK_t}, {ShiftMask, XK_a}}, spawn, SHCMD("alacritty -e tmux") },
-// // kitty
-// {2, {{MODKEY, XK_t}, {0, XK_k}}, spawn, SHCMD("kitty") },
-// // kitty with tmux
-// {2, {{MODKEY, XK_t}, {ShiftMask, XK_k}}, spawn, SHCMD("kitty -e tmux") },
-// /************************************* File browsers *************************************/
-// // GUI filebrowser (pcmanfm)
-// {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_g}}, spawn, SHCMD(GUI_FILEMANAGER) },
-// // Rofi file browser (small)
-// {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_f}}, spawn, SHCMD("rofi -show filebrowser") },
-// // ranger
-// {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_r}}, spawn, SHCMD(TERMINAL " -e ranger") },
-// /************************************* Start the web browers *************************************/
-// // Google chrome stable
-// {2, {{MODKEY, XK_w}, {0, XK_g}}, spawn, SHCMD(WEBBROWSER) },
-// // Tor brower
-// {2, {{MODKEY, XK_w}, {0, XK_t}}, spawn, SHCMD("tor-browser") },
-// /************************************* Start the caht/email/\* apps *************************************/
-// // Discord
-// {2, {{MODKEY, XK_c}, {0, XK_d}}, spawn, SHCMD("discord") },
-// // Obsidian
-// {2, {{MODKEY, XK_c}, {0, XK_o}}, spawn, SHCMD("obsidian") },
-// /************************************* Start the dev apps *************************************/
-// // Jetbrains toolbox
-// {2, {{MODKEY, XK_a}, {0, XK_j}}, spawn, SHCMD("jetbrains-toolbox") },
-// // NeoVim
-// {2, {{MODKEY, XK_a}, {0, XK_n}}, spawn, SHCMD(TERMINAL " -e nvim") },
-// // Vim
-// {2, {{MODKEY, XK_a}, {0, XK_v}}, spawn, SHCMD(TERMINAL " -e vim") },
-// // emacs
-// {2, {{MODKEY, XK_a}, {0, XK_e}}, spawn, SHCMD("emacs") },
-// /************************************* Start personalize apps *************************************/
-// // nitrogen
-// {2, {{MODKEY, XK_p}, {0, XK_b}}, spawn, SHCMD("nitrogen") },
-// // nm-connection-editor
-// {2, {{MODKEY, XK_p}, {0, XK_n}}, spawn, SHCMD("nm-connection-editor") },
-// /************************************* Start multi media apps *************************************/
-// // cmus
-// {2, {{MODKEY, XK_m}, {0, XK_c}}, spawn, SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
-// // vlc
-// {2, {{MODKEY, XK_m}, {0, XK_v}}, spawn, SHCMD("vlc") },
-// // vlc in the main terminal
-// {2, {{MODKEY, XK_m}, {ShiftMask, XK_v}}, spawn, SHCMD(TERMINAL "nvlc") },
-// /************************************* Start the emoji piker apps *************************************/
-// // Emoji selector (rofi)
-// {1, {{Mod4Mask, XK_e}}, spawn, SHCMD("rofi -show emoji") },
-// /************************************* dwm keys *************************************/
-// // Full screen mode
-// {1, {{MODKEY, XK_f}}, fullscreen, {0} },
-// // Toggle the slstatus bar (hide/show)
-// {1, {{MODKEY, XK_b}}, togglebar, {0} },
-// // Change the focus
-// {1, {{MODKEY, XK_j}}, focusstack, {.i = +1 } },
-// {1, {{MODKEY, XK_k}}, focusstack, {.i = -1 } },
-// // Change the stack layout (horizontal/virtecal)
-// {1, {{MODKEY, XK_i}}, incnmaster, {.i = +1 } },
-// {1, {{MODKEY, XK_d}}, incnmaster, {.i = -1 } },
-// // Change the focus window size (in the tile mode)
-// {1, {{MODKEY, XK_h}}, setmfact, {.f = -0.05} },
-// {1, {{MODKEY, XK_l}}, setmfact, {.f = +0.05} },
-// // { MODKEY, XK_Return, zoom, {0} },
-// {1, {{MODKEY, XK_Tab}}, view, {0} },
-//
-// {1, {{MODKEY|ShiftMask, XK_j}}, movestack, {.i = +1 } },
-// {1, {{MODKEY|ShiftMask, XK_k}}, movestack, {.i = -1 } },
-// // Toogle styky mode
-// {1, {{MODKEY|ShiftMask, XK_s}}, togglesticky, {0} },
-//
-// // Quit from the foucsed window (kill)
-// {2, {{MODKEY, XK_q}, {0, XK_q}}, killclient, {0} },
-// /************************* Switch between layouts *************************/
-// // Tiled layout
-// {2, {{MODKEY, XK_s}, {0, XK_t}}, setlayout, {.v = &layouts[0]} },
-// // Floating layout
-// {2, {{MODKEY, XK_s}, {0, XK_f}}, setlayout, {.v = &layouts[1]} },
-// // Monocle layout
-// {2, {{MODKEY, XK_s}, {0, XK_m}}, setlayout, {.v = &layouts[2]} },
-// // Grid layout
-// {2, {{MODKEY, XK_s}, {0, XK_g}}, setlayout, {.v = &layouts[3]} },
-// // Spiral layout
-// {2, {{MODKEY, XK_s}, {0, XK_r}}, setlayout, {.v = &layouts[4]} },
-// // Dwindle layout
-// {2, {{MODKEY, XK_s}, {ShiftMask, XK_r}}, setlayout, {.v = &layouts[5]} },
-// // Centerd master layout
-// {2, {{MODKEY, XK_s}, {0, XK_c}}, setlayout, {.v = &layouts[6]} },
-// // Centerd floating master layout
-// {2, {{MODKEY, XK_s}, {ShiftMask, XK_c}}, setlayout, {.v = &layouts[7]} },
-//
-// // Toggle between current layout and tile layout
-// {2, {{MODKEY, XK_s}, {0, XK_space}}, setlayout, {0} },
-// // Toggle floating window
-// {1, {{MODKEY|Mod1Mask, XK_f}}, togglefloating, {0} },
-// // View all tags
-// {1, {{MODKEY, XK_0}}, view, {.ui = ~0 } },
-// // Mirror the current tagg in all tags
-// {1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } },
-// // I don't know
-// {1, {{MODKEY, XK_comma}}, focusmon, {.i = -1 } },
-// {1, {{MODKEY, XK_period}}, focusmon, {.i = +1 } },
-// {1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = -1 } },
-// {1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = +1 } },
-||||||| 95139f7
- {2, {{MODKEY, XK_t}, {0, XK_a}}, spawn, SHCMD("alacritty") },
- // Start the alacritty terminal with tmux
- {2, {{MODKEY, XK_t}, {ShiftMask, XK_a}}, spawn, SHCMD("alacritty -e tmux") },
- // kitty
- {2, {{MODKEY, XK_t}, {0, XK_k}}, spawn, SHCMD("kitty") },
- // kitty with tmux
- {2, {{MODKEY, XK_t}, {ShiftMask, XK_k}}, spawn, SHCMD("kitty -e tmux") },
- /************************************* File browsers *************************************/
- // GUI filebrowser (pcmanfm)
- {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_g}}, spawn, SHCMD(GUI_FILEMANAGER) },
- // Rofi file browser (small)
- {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_f}}, spawn, SHCMD("rofi -show filebrowser") },
- // ranger
- {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_r}}, spawn, SHCMD(TERMINAL " -e ranger") },
- /************************************* Start the web browers *************************************/
- // Google chrome stable
- {2, {{MODKEY, XK_w}, {0, XK_g}}, spawn, SHCMD(WEBBROWSER) },
- // Tor brower
- {2, {{MODKEY, XK_w}, {0, XK_t}}, spawn, SHCMD("tor-browser") },
- /************************************* Start the caht/email/\* apps *************************************/
- // Discord
- {2, {{MODKEY, XK_c}, {0, XK_d}}, spawn, SHCMD("discord") },
- // Obsidian
- {2, {{MODKEY, XK_c}, {0, XK_o}}, spawn, SHCMD("obsidian") },
- /************************************* Start the dev apps *************************************/
- // Jetbrains toolbox
- {2, {{MODKEY, XK_a}, {0, XK_j}}, spawn, SHCMD("jetbrains-toolbox") },
- // NeoVim
- {2, {{MODKEY, XK_a}, {0, XK_n}}, spawn, SHCMD(TERMINAL " -e nvim") },
- // Vim
- {2, {{MODKEY, XK_a}, {0, XK_v}}, spawn, SHCMD(TERMINAL " -e vim") },
- // emacs
- {2, {{MODKEY, XK_a}, {0, XK_e}}, spawn, SHCMD("emacs") },
- /************************************* Start personalize apps *************************************/
- // nitrogen
- {2, {{MODKEY, XK_p}, {0, XK_b}}, spawn, SHCMD("nitrogen") },
- // nm-connection-editor
- {2, {{MODKEY, XK_p}, {0, XK_n}}, spawn, SHCMD("nm-connection-editor") },
- /************************************* Start multi media apps *************************************/
- // cmus
- {2, {{MODKEY, XK_m}, {0, XK_c}}, spawn, SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
- // vlc
- {2, {{MODKEY, XK_m}, {0, XK_v}}, spawn, SHCMD("vlc") },
- // vlc in the main terminal
- {2, {{MODKEY, XK_m}, {ShiftMask, XK_v}}, spawn, SHCMD(TERMINAL "nvlc") },
- /************************************* Start the emoji piker apps *************************************/
- // Emoji selector (rofi)
- {1, {{Mod4Mask, XK_e}}, spawn, SHCMD("rofi -show emoji") },
- /************************************* dwm keys *************************************/
- // Full screen mode
- {1, {{MODKEY, XK_f}}, fullscreen, {0} },
- // Toggle the slstatus bar (hide/show)
- {1, {{MODKEY, XK_b}}, togglebar, {0} },
- // Change the focus
- {1, {{MODKEY, XK_j}}, focusstack, {.i = +1 } },
- {1, {{MODKEY, XK_k}}, focusstack, {.i = -1 } },
- // Change the stack layout (horizontal/virtecal)
- {1, {{MODKEY, XK_i}}, incnmaster, {.i = +1 } },
- {1, {{MODKEY, XK_d}}, incnmaster, {.i = -1 } },
- // Change the focus window size (in the tile mode)
- {1, {{MODKEY, XK_h}}, setmfact, {.f = -0.05} },
- {1, {{MODKEY, XK_l}}, setmfact, {.f = +0.05} },
-// { MODKEY, XK_Return, zoom, {0} },
- {1, {{MODKEY, XK_Tab}}, view, {0} },
-
- {1, {{MODKEY|ShiftMask, XK_j}}, movestack, {.i = +1 } },
- {1, {{MODKEY|ShiftMask, XK_k}}, movestack, {.i = -1 } },
- // Toogle styky mode
- {1, {{MODKEY|ShiftMask, XK_s}}, togglesticky, {0} },
-
- // Quit from the foucsed window (kill)
- {2, {{MODKEY, XK_q}, {0, XK_q}}, killclient, {0} },
- /************************* Switch between layouts *************************/
- // Tiled layout
- {2, {{MODKEY, XK_s}, {0, XK_t}}, setlayout, {.v = &layouts[0]} },
- // Floating layout
- {2, {{MODKEY, XK_s}, {0, XK_f}}, setlayout, {.v = &layouts[1]} },
- // Monocle layout
- {2, {{MODKEY, XK_s}, {0, XK_m}}, setlayout, {.v = &layouts[2]} },
- // Grid layout
- {2, {{MODKEY, XK_s}, {0, XK_g}}, setlayout, {.v = &layouts[3]} },
- // Spiral layout
- {2, {{MODKEY, XK_s}, {0, XK_r}}, setlayout, {.v = &layouts[4]} },
- // Dwindle layout
- {2, {{MODKEY, XK_s}, {ShiftMask, XK_r}}, setlayout, {.v = &layouts[5]} },
- // Centerd master layout
- {2, {{MODKEY, XK_s}, {0, XK_c}}, setlayout, {.v = &layouts[6]} },
- // Centerd floating master layout
- {2, {{MODKEY, XK_s}, {ShiftMask, XK_c}}, setlayout, {.v = &layouts[7]} },
-
- // Toggle between current layout and tile layout
- {2, {{MODKEY, XK_s}, {0, XK_space}}, setlayout, {0} },
- // Toggle floating window
- {1, {{MODKEY|Mod1Mask, XK_f}}, togglefloating, {0} },
- // View all tags
- {1, {{MODKEY, XK_0}}, view, {.ui = ~0 } },
- // Mirror the current tagg in all tags
- {1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } },
- // I don't know
- {1, {{MODKEY, XK_comma}}, focusmon, {.i = -1 } },
- {1, {{MODKEY, XK_period}}, focusmon, {.i = +1 } },
- {1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = -1 } },
- {1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = +1 } },
-=======
- {2, {{MODKEY, XK_t}, {0, XK_a}}, spawn, SHCMD("alacritty") },
- // Start the alacritty terminal with tmux
- {2, {{MODKEY, XK_t}, {ShiftMask, XK_a}}, spawn, SHCMD("alacritty -e tmux") },
- // kitty
- {2, {{MODKEY, XK_t}, {0, XK_k}}, spawn, SHCMD("kitty") },
- // kitty with tmux
- {2, {{MODKEY, XK_t}, {ShiftMask, XK_k}}, spawn, SHCMD("kitty -e tmux") },
- /************************************* File browsers *************************************/
- // GUI filebrowser (pcmanfm)
- {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_g}}, spawn, SHCMD(GUI_FILEMANAGER) },
- // Rofi file browser (small)
- {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_f}}, spawn, SHCMD("rofi -show filebrowser") },
- // Terminal file manager (ranger)
- {2, {{MODKEY|ShiftMask, XK_f}, {0, XK_t}}, spawn, SHCMD(TERMINAL " -e ranger") },
- /************************************* Start the web browers *************************************/
- // Google chrome stable
- {2, {{MODKEY, XK_w}, {0, XK_g}}, spawn, SHCMD(WEBBROWSER) },
- // Tor brower
- {2, {{MODKEY, XK_w}, {0, XK_t}}, spawn, SHCMD("tor-browser") },
- /************************************* Start the caht/email/\* apps *************************************/
- // Discord
- {2, {{MODKEY, XK_c}, {0, XK_d}}, spawn, SHCMD("discord") },
- // Obsidian
- {2, {{MODKEY, XK_c}, {0, XK_o}}, spawn, SHCMD("obsidian") },
- /************************************* Start the dev apps *************************************/
- // Jetbrains toolbox
- {2, {{MODKEY, XK_a}, {0, XK_j}}, spawn, SHCMD("jetbrains-toolbox") },
- // NeoVim
- {2, {{MODKEY, XK_a}, {0, XK_n}}, spawn, SHCMD(TERMINAL " -e nvim") },
- // Vim
- {2, {{MODKEY, XK_a}, {0, XK_v}}, spawn, SHCMD(TERMINAL " -e vim") },
- // emacs
- {2, {{MODKEY, XK_a}, {0, XK_e}}, spawn, SHCMD("emacs") },
- /************************************* Start personalize apps *************************************/
- // nitrogen
- {2, {{MODKEY, XK_p}, {0, XK_b}}, spawn, SHCMD("nitrogen") },
- // nm-connection-editor
- {2, {{MODKEY, XK_p}, {0, XK_n}}, spawn, SHCMD("nm-connection-editor") },
- /************************************* Start multi media apps *************************************/
- // cmus
- {2, {{MODKEY, XK_m}, {0, XK_c}}, spawn, SHCMD("sh -c \"" TERMINAL " -e cmus\" & sh -c \"cmus-rpc --link\"") },
- // vlc
- {2, {{MODKEY, XK_m}, {0, XK_v}}, spawn, SHCMD("vlc") },
- // vlc in the main terminal
- {2, {{MODKEY, XK_m}, {ShiftMask, XK_v}}, spawn, SHCMD(TERMINAL "nvlc") },
- /************************************* Start the emoji piker apps *************************************/
- // Emoji selector (rofi)
- {1, {{Mod4Mask, XK_e}}, spawn, SHCMD("rofimoji") },
- /************************************* dwm keys *************************************/
- // Full screen mode
- {1, {{MODKEY, XK_f}}, fullscreen, {0} },
- // Toggle the slstatus bar (hide/show)
- {1, {{MODKEY, XK_b}}, togglebar, {0} },
- // Change the focus
- {1, {{MODKEY, XK_j}}, focusstack, {.i = +1 } },
- {1, {{MODKEY, XK_k}}, focusstack, {.i = -1 } },
- // Change the stack layout (horizontal/virtecal)
- {1, {{MODKEY, XK_i}}, incnmaster, {.i = +1 } },
- {1, {{MODKEY, XK_d}}, incnmaster, {.i = -1 } },
- // Change the focus window size (in the tile mode)
- {1, {{MODKEY, XK_h}}, setmfact, {.f = -0.05} },
- {1, {{MODKEY, XK_l}}, setmfact, {.f = +0.05} },
-// { MODKEY, XK_Return, zoom, {0} },
- {1, {{MODKEY, XK_Tab}}, view, {0} },
-
- {1, {{MODKEY|ShiftMask, XK_j}}, movestack, {.i = +1 } },
- {1, {{MODKEY|ShiftMask, XK_k}}, movestack, {.i = -1 } },
- // Toogle styky mode
- {1, {{MODKEY|ShiftMask, XK_s}}, togglesticky, {0} },
-
- // Quit from the foucsed window (kill)
- {2, {{MODKEY, XK_q}, {0, XK_q}}, killclient, {0} },
- /************************* Switch between layouts *************************/
- // Tiled layout
- {2, {{MODKEY, XK_s}, {0, XK_t}}, setlayout, {.v = &layouts[0]} },
- // Floating layout
- {2, {{MODKEY, XK_s}, {0, XK_f}}, setlayout, {.v = &layouts[1]} },
- // Monocle layout
- {2, {{MODKEY, XK_s}, {0, XK_m}}, setlayout, {.v = &layouts[2]} },
- // Grid layout
- {2, {{MODKEY, XK_s}, {0, XK_g}}, setlayout, {.v = &layouts[3]} },
- // Spiral layout
- {2, {{MODKEY, XK_s}, {0, XK_r}}, setlayout, {.v = &layouts[4]} },
- // Dwindle layout
- {2, {{MODKEY, XK_s}, {ShiftMask, XK_r}}, setlayout, {.v = &layouts[5]} },
- // Centerd master layout
- {2, {{MODKEY, XK_s}, {0, XK_c}}, setlayout, {.v = &layouts[6]} },
- // Centerd floating master layout
- {2, {{MODKEY, XK_s}, {ShiftMask, XK_c}}, setlayout, {.v = &layouts[7]} },
-
- // Toggle between current layout and tile layout
- {2, {{MODKEY, XK_s}, {0, XK_space}}, setlayout, {0} },
- // Toggle floating window
- {1, {{MODKEY|Mod1Mask, XK_f}}, togglefloating, {0} },
- // View all tags
- {1, {{MODKEY, XK_0}}, view, {.ui = ~0 } },
- // Mirror the current tagg in all tags
- {1, {{MODKEY|ShiftMask, XK_0}}, tag, {.ui = ~0 } },
- // I don't know
- {1, {{MODKEY, XK_comma}}, focusmon, {.i = -1 } },
- {1, {{MODKEY, XK_period}}, focusmon, {.i = +1 } },
- {1, {{MODKEY|ShiftMask, XK_comma}}, tagmon, {.i = -1 } },
- {1, {{MODKEY|ShiftMask, XK_period}}, tagmon, {.i = +1 } },
->>>>>>> update-stuff
- /************************* Tag keys *************************/
- TAGKEYS( XK_1, 0)
- TAGKEYS( XK_2, 1)
- TAGKEYS( XK_3, 2)
- TAGKEYS( XK_4, 3)
- TAGKEYS( XK_5, 4)
- TAGKEYS( XK_6, 5)
- TAGKEYS( XK_7, 6)
- TAGKEYS( XK_8, 7)
- TAGKEYS( XK_9, 8)
- TAGKEYS( XK_semicolon, 9)
- /* ---------------------------------- Control Keys ---------------------------------- */
-<<<<<<< HEAD
- // // Brightness controllers (requires xbacklight)
- // {1, {{0, XF86XK_MonBrightnessUp}}, spawn, SHCMD("xbacklight -inc 5") },
- // {1, {{0, XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
- // // Sound controllers (requires pamixer)
- // {1, {{0, XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
- // {1, {{0, XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
- // {1, {{0, XF86XK_AudioMute}}, spawn, SHCMD("pamixer -t") },
- // // Media controls (requires playerctl)
- // {1, {{0, XF86XK_AudioPlay}}, spawn, SHCMD("playerctl play-pause") },
- // {1, {{0, XF86XK_AudioStop}}, spawn, SHCMD("playerctl stop") },
- // {1, {{0, XF86XK_AudioNext}}, spawn, SHCMD("playerctl next") },
- // {1, {{0, XF86XK_AudioPrev}}, spawn, SHCMD("playerctl previous") },
- // // Mute and unmute mic
- // {1, {{0, XF86XK_AudioMicMute}}, spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
- // // Take a screenshot
- // {1, {{0, XK_Print}}, spawn, SHCMD(SCREENSHOT) },
- // /* ---------------------------------- lock Keys ---------------------------------- */
- // // Lock the screen
- // {1, {{MODKEY|ShiftMask, XK_x}}, spawn, SHCMD("betterlockscreen -l dim") },
- // // Kill dwm (super + shift + alt + q)
- // {1, {{MODKEY|ShiftMask|Mod1Mask, XK_q}}, quit, {0} },
-||||||| 95139f7
- // Brightness controllers (requires xbacklight)
- {1, {{0, XF86XK_MonBrightnessUp}}, spawn, SHCMD("xbacklight -inc 5") },
- {1, {{0, XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
- // Sound controllers (requires pamixer)
- {1, {{0, XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
- {1, {{0, XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
- {1, {{0, XF86XK_AudioMute}}, spawn, SHCMD("pamixer -t") },
- // Media controls (requires playerctl)
- {1, {{0, XF86XK_AudioPlay}}, spawn, SHCMD("playerctl play-pause") },
- {1, {{0, XF86XK_AudioStop}}, spawn, SHCMD("playerctl stop") },
- {1, {{0, XF86XK_AudioNext}}, spawn, SHCMD("playerctl next") },
- {1, {{0, XF86XK_AudioPrev}}, spawn, SHCMD("playerctl previous") },
- // Mute and unmute mic
- {1, {{0, XF86XK_AudioMicMute}}, spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
- // Take a screenshot
- {1, {{0, XK_Print}}, spawn, SHCMD(SCREENSHOT) },
- /* ---------------------------------- lock Keys ---------------------------------- */
- // Lock the screen
- {1, {{MODKEY|ShiftMask, XK_x}}, spawn, SHCMD("betterlockscreen -l dim") },
- // Kill dwm (super + shift + alt + q)
- {1, {{MODKEY|ShiftMask|Mod1Mask, XK_q}}, quit, {0} },
-=======
- // Brightness controllers (requires xbacklight)
- {1, {{0, XF86XK_MonBrightnessUp}}, spawn, SHCMD("xbacklight -inc 5") },
- {1, {{0, XF86XK_MonBrightnessDown}}, spawn, SHCMD("xbacklight -dec 5") },
- // Sound controllers (requires pamixer)
- {1, {{0, XF86XK_AudioRaiseVolume}}, spawn, SHCMD("pamixer --allow-boost -i 4") },
- {1, {{0, XF86XK_AudioLowerVolume}}, spawn, SHCMD("pamixer --allow-boost -d 4") },
- {1, {{0, XF86XK_AudioMute}}, spawn, SHCMD("pamixer -t") },
- // Media controls (requires playerctl)
- {1, {{0, XF86XK_AudioPlay}}, spawn, SHCMD("playerctl play-pause") },
- {1, {{0, XF86XK_AudioStop}}, spawn, SHCMD("playerctl stop") },
- {1, {{0, XF86XK_AudioNext}}, spawn, SHCMD("playerctl next") },
- {1, {{0, XF86XK_AudioPrev}}, spawn, SHCMD("playerctl previous") },
- // Mute and unmute mic
- {1, {{0, XF86XK_AudioMicMute}}, spawn, SHCMD("pactl set-source-mute @DEFAULT_SOURCE@ toggle") },
- // Take a screenshot
- {1, {{0, XK_Print}}, spawn, SHCMD(SCREENSHOT) },
- /* ---------------------------------- lock Keys ---------------------------------- */
- // Lock the screen
- {1, {{MODKEY|ShiftMask, XK_x}}, spawn, SHCMD("betterlockscreen -l dim") },
- {1, {{0, XF86XK_Suspend}}, spawn, SHCMD("betterlockscreen -l dim") },
- // Kill dwm (super + shift + alt + q)
- // {1, {{MODKEY|ShiftMask|Mod1Mask, XK_q}}, quit, {0} },
->>>>>>> update-stuff
-};
-
-/* button definitions */
-/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
-static Button buttons[] = {
- /* click event mask button function argument */
- { ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
- { ClkWinTitle, 0, Button2, zoom, {0} },
- { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
- { ClkClientWin, MODKEY, Button1, movemouse, {0} },
- { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
- { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
- { ClkTagBar, 0, Button1, view, {0} },
- { ClkTagBar, 0, Button3, toggleview, {0} },
- { ClkTagBar, MODKEY, Button1, tag, {0} },
- { ClkTagBar, MODKEY, Button3, toggletag, {0} },
-};
-
diff --git a/src/keys/keys.h b/src/keys/keys.h
index 1ab280f..2361298 100644
--- a/src/keys/keys.h
+++ b/src/keys/keys.h
@@ -1,6 +1,31 @@
-#ifndef keys_H
-#define keys_H
+#ifndef KEYS_H
+#define KEYS_H
+#include
+#include "../dwm.h"
+
+typedef struct {
+ unsigned int mod;
+ KeySym chain;
+ KeySym keysym;
+
+ void (*func)(const Arg *);
+
+ const Arg arg;
+} Key;
+
+/* key definitions */
+#define MODKEY Mod4Mask // win/super key
+
+#define TAGKEYS(CHAIN, KEY, TAG) \
+ { MODKEY, CHAIN, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask, CHAIN, KEY, toggleview, {.ui = 1 << TAG} }, \
+ { MODKEY|ShiftMask, CHAIN, KEY, tag, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask|ShiftMask, CHAIN, KEY, toggletag, {.ui = 1 << TAG} },
+
+// Include all the key bindings
+#ifndef KEYS_C
#include "keys.c"
+#endif
-#endif // !keys.h
+#endif // keys_H
diff --git a/src/keys/mouse.c b/src/keys/mouse.c
new file mode 100644
index 0000000..6eb59d8
--- /dev/null
+++ b/src/keys/mouse.c
@@ -0,0 +1,23 @@
+//
+// Created by anas on 10/31/22.
+//
+
+#include "mouse.h"
+#include "keys.h"
+
+/* button definitions */
+/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
+static Button buttons[] = {
+ /* click event mask button function argument */
+ {ClkTagBar, MODKEY, Button1, tag, {0}},
+ {ClkTagBar, MODKEY, Button3, toggletag, {0}},
+ {ClkWinTitle, 0, Button2, zoom, {0}},
+ {ClkStatusText, 0, Button2, spawn, {.v = termcmd}},
+ {ClkClientWin, MODKEY, Button1, movemouse, {0}},
+ {ClkClientWin, MODKEY, Button2, togglefloating, {0}},
+ {ClkClientWin, MODKEY, Button3, resizemouse, {0}},
+ {ClkTagBar, 0, Button1, view, {0}},
+ {ClkTagBar, 0, Button3, toggleview, {0}},
+ {ClkTagBar, MODKEY, Button1, tag, {0}},
+ {ClkTagBar, MODKEY, Button3, toggletag, {0}},
+};
diff --git a/src/keys/mouse.h b/src/keys/mouse.h
new file mode 100644
index 0000000..75c4c58
--- /dev/null
+++ b/src/keys/mouse.h
@@ -0,0 +1,29 @@
+//
+// Created by anas on 10/31/22.
+//
+
+#ifndef MOUSE_H
+#define MOUSE_H
+
+#include
+
+typedef struct {
+ unsigned int click;
+ unsigned int mask;
+ unsigned int button;
+
+ void (*func)(const Arg *arg);
+
+ const Arg arg;
+} Button;
+
+enum {
+ ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
+ ClkClientWin, ClkRootWin, ClkLast
+}; /* clicks */
+
+#ifndef MOUSE_C
+#include "mouse.c"
+#endif
+
+#endif //MOUSE_H
diff --git a/src/layouts/centeredmaster.c b/src/layouts/centeredmaster.c
index 16f2a67..c5b91cd 100644
--- a/src/layouts/centeredmaster.c
+++ b/src/layouts/centeredmaster.c
@@ -1,102 +1,103 @@
+#include "../dwm.h"
+#include "../util.h"
+
void
-centeredmaster(Monitor *m)
-{
- unsigned int i, n, h, mw, mx, my, oty, ety, tw;
- Client *c;
+centeredmaster(Monitor *m) {
+ unsigned int i, n, h, mw, mx, my, oty, ety, tw;
+ Client *c;
- /* count number of clients in the selected monitor */
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
+ /* count number of clients in the selected monitor */
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
- /* initialize areas */
- mw = m->ww;
- mx = 0;
- my = 0;
- tw = mw;
+ /* initialize areas */
+ mw = m->ww;
+ mx = 0;
+ my = 0;
+ tw = mw;
- if (n > m->nmaster) {
- /* go mfact box in the center if more than nmaster clients */
- mw = m->nmaster ? m->ww * m->mfact : 0;
- tw = m->ww - mw;
+ if (n > m->nmaster) {
+ /* go mfact box in the center if more than nmaster clients */
+ mw = m->nmaster ? m->ww * m->mfact : 0;
+ tw = m->ww - mw;
- if (n - m->nmaster > 1) {
- /* only one client */
- mx = (m->ww - mw) / 2;
- tw = (m->ww - mw) / 2;
- }
- }
+ if (n - m->nmaster > 1) {
+ /* only one client */
+ mx = (m->ww - mw) / 2;
+ tw = (m->ww - mw) / 2;
+ }
+ }
- oty = 0;
- ety = 0;
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- /* nmaster clients are stacked vertically, in the center
- * of the screen */
- h = (m->wh - my) / (MIN(n, m->nmaster) - i);
- resize(c, m->wx + mx, m->wy + my, mw - (2*c->bw),
- h - (2*c->bw), 0);
- my += HEIGHT(c);
- } else {
- /* stack clients are stacked vertically */
- if ((i - m->nmaster) % 2 ) {
- h = (m->wh - ety) / ( (1 + n - i) / 2);
- resize(c, m->wx, m->wy + ety, tw - (2*c->bw),
- h - (2*c->bw), 0);
- ety += HEIGHT(c);
- } else {
- h = (m->wh - oty) / ((1 + n - i) / 2);
- resize(c, m->wx + mx + mw, m->wy + oty,
- tw - (2*c->bw), h - (2*c->bw), 0);
- oty += HEIGHT(c);
- }
- }
+ oty = 0;
+ ety = 0;
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i < m->nmaster) {
+ /* nmaster clients are stacked vertically, in the center
+ * of the screen */
+ h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+ resize(c, m->wx + mx, m->wy + my, mw - (2 * c->bw),
+ h - (2 * c->bw), 0);
+ my += HEIGHT(c);
+ } else {
+ /* stack clients are stacked vertically */
+ if ((i - m->nmaster) % 2) {
+ h = (m->wh - ety) / ((1 + n - i) / 2);
+ resize(c, m->wx, m->wy + ety, tw - (2 * c->bw),
+ h - (2 * c->bw), 0);
+ ety += HEIGHT(c);
+ } else {
+ h = (m->wh - oty) / ((1 + n - i) / 2);
+ resize(c, m->wx + mx + mw, m->wy + oty,
+ tw - (2 * c->bw), h - (2 * c->bw), 0);
+ oty += HEIGHT(c);
+ }
+ }
}
void
-centeredfloatingmaster(Monitor *m)
-{
- unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx;
- Client *c;
+centeredfloatingmaster(Monitor *m) {
+ unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx;
+ Client *c;
- /* count number of clients in the selected monitor */
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
+ /* count number of clients in the selected monitor */
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
- /* initialize nmaster area */
- if (n > m->nmaster) {
- /* go mfact box in the center if more than nmaster clients */
- if (m->ww > m->wh) {
- mw = m->nmaster ? m->ww * m->mfact : 0;
- mh = m->nmaster ? m->wh * 0.9 : 0;
- } else {
- mh = m->nmaster ? m->wh * m->mfact : 0;
- mw = m->nmaster ? m->ww * 0.9 : 0;
- }
- mx = mxo = (m->ww - mw) / 2;
- my = myo = (m->wh - mh) / 2;
- } else {
- /* go fullscreen if all clients are in the master area */
- mh = m->wh;
- mw = m->ww;
- mx = mxo = 0;
- my = myo = 0;
- }
+ /* initialize nmaster area */
+ if (n > m->nmaster) {
+ /* go mfact box in the center if more than nmaster clients */
+ if (m->ww > m->wh) {
+ mw = m->nmaster ? m->ww * m->mfact : 0;
+ mh = m->nmaster ? m->wh * 0.9 : 0;
+ } else {
+ mh = m->nmaster ? m->wh * m->mfact : 0;
+ mw = m->nmaster ? m->ww * 0.9 : 0;
+ }
+ mx = mxo = (m->ww - mw) / 2;
+ my = myo = (m->wh - mh) / 2;
+ } else {
+ /* go fullscreen if all clients are in the master area */
+ mh = m->wh;
+ mw = m->ww;
+ mx = mxo = 0;
+ my = myo = 0;
+ }
- for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- /* nmaster clients are stacked horizontally, in the center
- * of the screen */
- w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i);
- resize(c, m->wx + mx, m->wy + my, w - (2*c->bw),
- mh - (2*c->bw), 0);
- mx += WIDTH(c);
- } else {
- /* stack clients are stacked horizontally */
- w = (m->ww - tx) / (n - i);
- resize(c, m->wx + tx, m->wy, w - (2*c->bw),
- m->wh - (2*c->bw), 0);
- tx += WIDTH(c);
- }
+ for (i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i < m->nmaster) {
+ /* nmaster clients are stacked horizontally, in the center
+ * of the screen */
+ w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i);
+ resize(c, m->wx + mx, m->wy + my, w - (2 * c->bw),
+ mh - (2 * c->bw), 0);
+ mx += WIDTH(c);
+ } else {
+ /* stack clients are stacked horizontally */
+ w = (m->ww - tx) / (n - i);
+ resize(c, m->wx + tx, m->wy, w - (2 * c->bw),
+ m->wh - (2 * c->bw), 0);
+ tx += WIDTH(c);
+ }
}
diff --git a/src/layouts/centeredmaster.h b/src/layouts/centeredmaster.h
index d7a7e4b..b0ca7fb 100644
--- a/src/layouts/centeredmaster.h
+++ b/src/layouts/centeredmaster.h
@@ -7,4 +7,4 @@ static void centeredfloatingmaster(Monitor *m);
#include "centeredmaster.c"
-#endif // !centeredmaster.h
+#endif // centeredmaster_H
diff --git a/src/layouts/fibonacci.c b/src/layouts/fibonacci.c
index fce0a57..6c94c67 100644
--- a/src/layouts/fibonacci.c
+++ b/src/layouts/fibonacci.c
@@ -1,66 +1,65 @@
+#include "../dwm.h"
+
void
fibonacci(Monitor *mon, int s) {
- unsigned int i, n, nx, ny, nw, nh;
- Client *c;
+ unsigned int i, n, nx, ny, nw, nh;
+ Client *c;
- for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
- if(n == 0)
- return;
-
- nx = mon->wx;
- ny = 0;
- nw = mon->ww;
- nh = mon->wh;
-
- for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
- if((i % 2 && nh / 2 > 2 * c->bw)
- || (!(i % 2) && nw / 2 > 2 * c->bw)) {
- if(i < n - 1) {
- if(i % 2)
- nh /= 2;
- else
- nw /= 2;
- if((i % 4) == 2 && !s)
- nx += nw;
- else if((i % 4) == 3 && !s)
- ny += nh;
- }
- if((i % 4) == 0) {
- if(s)
- ny += nh;
- else
- ny -= nh;
- }
- else if((i % 4) == 1)
- nx += nw;
- else if((i % 4) == 2)
- ny += nh;
- else if((i % 4) == 3) {
- if(s)
- nx += nw;
- else
- nx -= nw;
- }
- if(i == 0)
- {
- if(n != 1)
- nw = mon->ww * mon->mfact;
- ny = mon->wy;
- }
- else if(i == 1)
- nw = mon->ww - nw;
- i++;
- }
- resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
- }
+ for (n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
+
+ nx = mon->wx;
+ ny = 0;
+ nw = mon->ww;
+ nh = mon->wh;
+
+ for (i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
+ if ((i % 2 && nh / 2 > 2 * c->bw)
+ || (!(i % 2) && nw / 2 > 2 * c->bw)) {
+ if (i < n - 1) {
+ if (i % 2)
+ nh /= 2;
+ else
+ nw /= 2;
+ if ((i % 4) == 2 && !s)
+ nx += nw;
+ else if ((i % 4) == 3 && !s)
+ ny += nh;
+ }
+ if ((i % 4) == 0) {
+ if (s)
+ ny += nh;
+ else
+ ny -= nh;
+ } else if ((i % 4) == 1)
+ nx += nw;
+ else if ((i % 4) == 2)
+ ny += nh;
+ else if ((i % 4) == 3) {
+ if (s)
+ nx += nw;
+ else
+ nx -= nw;
+ }
+ if (i == 0) {
+ if (n != 1)
+ nw = mon->ww * mon->mfact;
+ ny = mon->wy;
+ } else if (i == 1)
+ nw = mon->ww - nw;
+ i++;
+ }
+ resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
+ }
}
void
dwindle(Monitor *mon) {
- fibonacci(mon, 1);
+ fibonacci(mon, 1);
}
void
spiral(Monitor *mon) {
- fibonacci(mon, 0);
+ fibonacci(mon, 0);
}
diff --git a/src/layouts/grid.c b/src/layouts/grid.c
index d26acf3..d6b3712 100644
--- a/src/layouts/grid.c
+++ b/src/layouts/grid.c
@@ -1,27 +1,29 @@
+#include "../dwm.h"
+
void
grid(Monitor *m) {
- unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows;
- Client *c;
+ unsigned int i, n, cx, cy, cw, ch, aw, ah, cols, rows;
+ Client *c;
- for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next))
- n++;
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next))
+ n++;
- /* grid dimensions */
- for(rows = 0; rows <= n/2; rows++)
- if(rows*rows >= n)
- break;
- cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows;
+ /* grid dimensions */
+ for (rows = 0; rows <= n / 2; rows++)
+ if (rows * rows >= n)
+ break;
+ cols = (rows && (rows - 1) * rows >= n) ? rows - 1 : rows;
- /* window geoms (cell height/width) */
- ch = m->wh / (rows ? rows : 1);
- cw = m->ww / (cols ? cols : 1);
- for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
- cx = m->wx + (i / rows) * cw;
- cy = m->wy + (i % rows) * ch;
- /* adjust height/width of last row/column's windows */
- ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0;
- aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0;
- resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False);
- i++;
- }
+ /* window geoms (cell height/width) */
+ ch = m->wh / (rows ? rows : 1);
+ cw = m->ww / (cols ? cols : 1);
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
+ cx = m->wx + (i / rows) * cw;
+ cy = m->wy + (i % rows) * ch;
+ /* adjust height/width of last row/column's windows */
+ ah = ((i + 1) % rows == 0) ? m->wh - ch * rows : 0;
+ aw = (i >= rows * (cols - 1)) ? m->ww - cw * cols : 0;
+ resize(c, cx, cy, cw - 2 * c->bw + aw, ch - 2 * c->bw + ah, False);
+ i++;
+ }
}
diff --git a/src/layouts/layouts.h b/src/layouts/layouts.h
index 1313517..c5f4568 100644
--- a/src/layouts/layouts.h
+++ b/src/layouts/layouts.h
@@ -10,15 +10,15 @@
// Layouts array
static const Layout layouts[] = {
- /* symbol arrange function */
- { "[]=", tile }, /* first entry is default */
- { "><>", NULL }, /* no layout function means floating behavior */
- { "[M]", monocle }, // 2
- { "HHH", grid }, // 3
- { "[@]", spiral }, // 4
- { "[\\]", dwindle }, // 5
- { "|M|", centeredmaster }, // 6
- { ">M>", centeredfloatingmaster }, // 7
+ /* symbol arrange function */
+ {"[]=", tile}, /* first entry is default */
+ {"><>", NULL}, /* no layout function means floating behavior */
+ {"[M]", monocle}, // 2
+ {"HHH", grid}, // 3
+ {"[@]", spiral}, // 4
+ {"[\\]", dwindle}, // 5
+ {"|M|", centeredmaster}, // 6
+ {">M>", centeredfloatingmaster}, // 7
};
-#endif // !layouts.h
+#endif // layouts_H
diff --git a/src/layouts/monocle.c b/src/layouts/monocle.c
index 41db214..7ddaf78 100644
--- a/src/layouts/monocle.c
+++ b/src/layouts/monocle.c
@@ -1,14 +1,16 @@
-void
-monocle(Monitor *m)
-{
- unsigned int n = 0;
- Client *c;
+#include "../dwm.h"
+#include "../util.h"
- for (c = m->clients; c; c = c->next)
- if (ISVISIBLE(c))
- n++;
- if (n > 0) /* override layout symbol */
- snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
- for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
- resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
+void
+monocle(Monitor *m) {
+ unsigned int n = 0;
+ Client *c;
+
+ for (c = m->clients; c; c = c->next)
+ if (ISVISIBLE(c))
+ n++;
+ if (n > 0) /* override layout symbol */
+ snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n);
+ for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
+ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0);
}
diff --git a/src/layouts/tile.c b/src/layouts/tile.c
index ec2e945..206c13e 100644
--- a/src/layouts/tile.c
+++ b/src/layouts/tile.c
@@ -1,27 +1,29 @@
+#include "../dwm.h"
+#include "../util.h"
+
void
-tile(Monitor *m)
-{
- unsigned int i, n, h, mw, my, ty;
- Client *c;
+tile(Monitor *m) {
+ unsigned int i, n, h, mw, my, ty;
+ Client *c;
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if (n == 0)
+ return;
- if (n > m->nmaster)
- mw = m->nmaster ? m->ww * m->mfact : 0;
- else
- mw = m->ww;
- for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- h = (m->wh - my) / (MIN(n, m->nmaster) - i);
- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
- if (my + HEIGHT(c) < m->wh)
- my += HEIGHT(c);
- } else {
- h = (m->wh - ty) / (n - i);
- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
- if (ty + HEIGHT(c) < m->wh)
- ty += HEIGHT(c);
- }
+ if (n > m->nmaster)
+ mw = m->nmaster ? m->ww * m->mfact : 0;
+ else
+ mw = m->ww;
+ for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i < m->nmaster) {
+ h = (m->wh - my) / (MIN(n, m->nmaster) - i);
+ resize(c, m->wx, m->wy + my, mw - (2 * c->bw), h - (2 * c->bw), 0);
+ if (my + HEIGHT(c) < m->wh)
+ my += HEIGHT(c);
+ } else {
+ h = (m->wh - ty) / (n - i);
+ resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2 * c->bw), h - (2 * c->bw), 0);
+ if (ty + HEIGHT(c) < m->wh)
+ ty += HEIGHT(c);
+ }
}
diff --git a/src/movestack.c b/src/movestack.c
index 520f4ae..74f0cb2 100644
--- a/src/movestack.c
+++ b/src/movestack.c
@@ -1,48 +1,50 @@
-void
+#include "dwm.h"
+#include "util.h"
+
+static void
movestack(const Arg *arg) {
- Client *c = NULL, *p = NULL, *pc = NULL, *i;
+ Client *c = NULL, *p = NULL, *pc = NULL, *i;
- if(arg->i > 0) {
- /* find the client after selmon->sel */
- for(c = selmon->sel->next; c && (!ISVISIBLE(c) || c->isfloating); c = c->next);
- if(!c)
- for(c = selmon->clients; c && (!ISVISIBLE(c) || c->isfloating); c = c->next);
+ if (arg->i > 0) {
+ /* find the client after selmon->sel */
+ for (c = selmon->sel->next; c && (!ISVISIBLE(c) || c->isfloating); c = c->next);
+ if (!c)
+ for (c = selmon->clients; c && (!ISVISIBLE(c) || c->isfloating); c = c->next);
- }
- else {
- /* find the client before selmon->sel */
- for(i = selmon->clients; i != selmon->sel; i = i->next)
- if(ISVISIBLE(i) && !i->isfloating)
- c = i;
- if(!c)
- for(; i; i = i->next)
- if(ISVISIBLE(i) && !i->isfloating)
- c = i;
- }
- /* find the client before selmon->sel and c */
- for(i = selmon->clients; i && (!p || !pc); i = i->next) {
- if(i->next == selmon->sel)
- p = i;
- if(i->next == c)
- pc = i;
- }
+ } else {
+ /* find the client before selmon->sel */
+ for (i = selmon->clients; i != selmon->sel; i = i->next)
+ if (ISVISIBLE(i) && !i->isfloating)
+ c = i;
+ if (!c)
+ for (; i; i = i->next)
+ if (ISVISIBLE(i) && !i->isfloating)
+ c = i;
+ }
+ /* find the client before selmon->sel and c */
+ for (i = selmon->clients; i && (!p || !pc); i = i->next) {
+ if (i->next == selmon->sel)
+ p = i;
+ if (i->next == c)
+ pc = i;
+ }
- /* swap c and selmon->sel selmon->clients in the selmon->clients list */
- if(c && c != selmon->sel) {
- Client *temp = selmon->sel->next==c?selmon->sel:selmon->sel->next;
- selmon->sel->next = c->next==selmon->sel?c:c->next;
- c->next = temp;
+ /* swap c and selmon->sel selmon->clients in the selmon->clients list */
+ if (c && c != selmon->sel) {
+ Client *temp = selmon->sel->next == c ? selmon->sel : selmon->sel->next;
+ selmon->sel->next = c->next == selmon->sel ? c : c->next;
+ c->next = temp;
- if(p && p != c)
- p->next = c;
- if(pc && pc != selmon->sel)
- pc->next = selmon->sel;
+ if (p && p != c)
+ p->next = c;
+ if (pc && pc != selmon->sel)
+ pc->next = selmon->sel;
- if(selmon->sel == selmon->clients)
- selmon->clients = c;
- else if(c == selmon->clients)
- selmon->clients = selmon->sel;
+ if (selmon->sel == selmon->clients)
+ selmon->clients = c;
+ else if (c == selmon->clients)
+ selmon->clients = selmon->sel;
- arrange(selmon);
- }
+ arrange(selmon);
+ }
}
\ No newline at end of file
diff --git a/src/transient.c b/src/transient.c
index 040adb5..802b66a 100644
--- a/src/transient.c
+++ b/src/transient.c
@@ -6,37 +6,37 @@
#include
int main(void) {
- Display *d;
- Window r, f, t = None;
- XSizeHints h;
- XEvent e;
+ Display *d;
+ Window r, f, t = None;
+ XSizeHints h;
+ XEvent e;
- d = XOpenDisplay(NULL);
- if (!d)
- exit(1);
- r = DefaultRootWindow(d);
+ d = XOpenDisplay(NULL);
+ if (!d)
+ exit(1);
+ r = DefaultRootWindow(d);
- f = XCreateSimpleWindow(d, r, 100, 100, 400, 400, 0, 0, 0);
- h.min_width = h.max_width = h.min_height = h.max_height = 400;
- h.flags = PMinSize | PMaxSize;
- XSetWMNormalHints(d, f, &h);
- XStoreName(d, f, "floating");
- XMapWindow(d, f);
+ f = XCreateSimpleWindow(d, r, 100, 100, 400, 400, 0, 0, 0);
+ h.min_width = h.max_width = h.min_height = h.max_height = 400;
+ h.flags = PMinSize | PMaxSize;
+ XSetWMNormalHints(d, f, &h);
+ XStoreName(d, f, "floating");
+ XMapWindow(d, f);
- XSelectInput(d, f, ExposureMask);
- while (1) {
- XNextEvent(d, &e);
+ XSelectInput(d, f, ExposureMask);
+ while (1) {
+ XNextEvent(d, &e);
- if (t == None) {
- sleep(5);
- t = XCreateSimpleWindow(d, r, 50, 50, 100, 100, 0, 0, 0);
- XSetTransientForHint(d, t, f);
- XStoreName(d, t, "transient");
- XMapWindow(d, t);
- XSelectInput(d, t, ExposureMask);
- }
- }
+ if (t == None) {
+ sleep(5);
+ t = XCreateSimpleWindow(d, r, 50, 50, 100, 100, 0, 0, 0);
+ XSetTransientForHint(d, t, f);
+ XStoreName(d, t, "transient");
+ XMapWindow(d, t);
+ XSelectInput(d, t, ExposureMask);
+ }
+ }
- XCloseDisplay(d);
- exit(0);
+ XCloseDisplay(d);
+ exit(0);
}
diff --git a/src/util.h b/src/util.h
index f633b51..0de0c0e 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,8 +1,25 @@
-/* See LICENSE file for copyright and license details. */
+#ifndef UTIL_H
+#define UTIL_H
+/* macros */
+#define BUTTONMASK (ButtonPressMask|ButtonReleaseMask)
+#define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask))
+#define INTERSECT(x, y, w, h, m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \
+ * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy)))
+#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]) || C->issticky)
+#define LENGTH(X) (sizeof X / sizeof X[0])
+#define MOUSEMASK (BUTTONMASK|PointerMotionMask)
+#define WIDTH(X) ((X)->w + 2 * (X)->bw)
+#define HEIGHT(X) ((X)->h + 2 * (X)->bw)
+#define TAGMASK ((1 << LENGTH(tags)) - 1)
+#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
+
+#define XEMBED_EMBEDDED_VERSION ((VERSION_MAJOR << 16) | VERSION_MINOR)
#define MAX(A, B) ((A) > (B) ? (A) : (B))
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B))
void die(const char *fmt, ...);
void *ecalloc(size_t nmemb, size_t size);
+
+#endif // util_H
\ No newline at end of file