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 happening).
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 @@ -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 @@ -1639,8 +1639,6 @@ sigchld(int unused) void spawn(const Arg *arg) { - if (arg->v == dmenucmd) - dmenumon[0] = '0' + selmon->num; if (fork() == 0) { if (dpy) close(ConnectionNumber(dpy)); -- 2.21.0