On Fri, Aug 26, 2022 at 02:48:46PM +0200, Stein wrote:
> Reasoning: Since 2011 dmenu has been capable of working out which
> monitor currently has focus in a Xinerama setup, making the use
> of the -m flag more or less redundant.
> 
> This is easily demonstrated by using dmenu in any other window
> manager.
> 
> There used to be a nodmenu patch that provided these changes:
> https://git.suckless.org/sites/commit/ed68e3629de4ef2ca2d3f8893a79fb570b4c0cbc.html
> 
> but this was removed on the basis that it was very easy to work
> out and apply manually if needed.
> 
> The proposal here is to remove this dependency from dwm. The
> mechanism of the dmenumon variable could be provided via a patch
> if need be.
> 
> The edge case scenario that dmenu does not handle on its own, and
> the effect of removing this mechanism, is that if the user trigger
> focusmon via keybindings to change focus to another monitor that
> has no clients, then dmenu will open on the monitor containing the
> window with input focus (or the monitor with the mouse cursor if
> no windows have input focus).
> 
> If this edge case is important to cover then this can be addressed
> by setting input focus to selmon->barwin in the focus function if
> there is no client to give focus to (rather than giving focus back
> to the root window).
> ---
>  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 9efa774..061ad66 100644
> --- a/config.def.h
> +++ b/config.def.h
> @@ -56,8 +56,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 const Key keys[] = {
> diff --git a/dwm.c b/dwm.c
> index 253aba7..e5efb6a 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.37.2
> 
> 

Hi,

I think it looks OK, any comments of others if something was missed and this
breaks some workflow?

-- 
Kind regards,
Hiltjo

Reply via email to