[dev] [dwm]/[dmenu] Suggestion: Remove dmenu-integration from dwm

From: aleks <aleks.stier_AT_icloud.com>
Date: Thu, 28 Feb 2019 19:25:06 +0100

The spawn method in dwm.c checks if the received argument is dmenucmd
and if so it sets the variable dmenumon (which is defined in config.h)
to the currectly selected monitor (at least thats what I think is

It seems to me to be bad design that dmenu is intermingled with dwm so
deeply and that dmenu depends on dwm to detect to correct monitor.
People who do not want to use dmenu and try to remove dmenu-specific
code from their dwm config-file will get a compilation error which says
that the variable dmenumon in dwm.c at line 1639 is not defined.
It is not even possible to rename dmenucmd because then a similar
compilation error will be thrown.

I think that the hardcoded dmenu code in dwm.c should be removed.
The correct monitor needs to be detected regardless of the application
or not? Or if it is not possible does it mean that dmenu doesn't work
correctly in multi-monitor environments except when the window-manager
explicitly hardcodes the communication with dmenu?
 config.def.h | 3 +--
 dwm.c        | 2 --
 2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/config.def.h b/config.def.h
index 1c0b587..da4b71d 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -55,8 +55,7 @@ static const Layout layouts[] = {
 #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", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
+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 Key keys[] = {
diff --git a/dwm.c b/dwm.c
index 4465af1..b9e14c0 100644
--- a/dwm.c
+++ b/dwm.c
_AT_@ -1639,8 +1639,6 @@ sigchld(int unused)
 spawn(const Arg *arg)
-	if (arg->v == dmenucmd)
-		dmenumon[0] = '0' + selmon->num;
 	if (fork() == 0) {
 		if (dpy)
Received on Thu Feb 28 2019 - 19:25:06 CET

This archive was generated by hypermail 2.3.0 : Thu Feb 28 2019 - 19:36:07 CET