I made a patch that moves all not focused clients to another tag.

But the problem I encountered is that there is not enough modifiers to define
another function, so in the patch I had to exchange toggletag for tagunfocused.

Another solution would be not using MODKEY but Mod1Mask, but this would not work
with users that set the MODKEY to Mod1Mask.

I'm new to programming, so please feel free to show me where I can clean my
code.

Thanks!
diff -up dwm/config.def.h dwmmod/config.def.h
--- dwm/config.def.h    2020-09-20 21:07:45.689633732 -0300
+++ dwmmod/config.def.h 2020-09-20 21:10:21.823645209 -0300
@@ -49,7 +49,7 @@ static const Layout layouts[] = {
        { 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} },
+       { MODKEY|ControlMask|ShiftMask, KEY,      tagunfocused,   {.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 } }
diff -up dwm/dwm.c dwmmod/dwm.c
--- dwm/dwm.c   2020-09-20 21:07:45.690633732 -0300
+++ dwmmod/dwm.c        2020-09-20 21:09:54.463643197 -0300
@@ -208,6 +208,7 @@ static void showhide(Client *c);
 static void sigchld(int unused);
 static void spawn(const Arg *arg);
 static void tag(const Arg *arg);
 static void tagmon(const Arg *arg);
+static void tagunfocused(const Arg *arg);
 static void tile(Monitor *);
 static void togglebar(const Arg *arg);
@@ -1664,6 +1665,29 @@ tag(const Arg *arg)
 }
 
 void
+tagunfocused(const Arg *arg)
+{
+       Client *c = NULL;
+       int n;
+       Client *nbc;
+
+       for (n = 0, nbc = nexttiled(selmon->clients); nbc; nbc = 
nexttiled(nbc->next), n++);
+
+       if (!selmon->sel)
+               return;
+       for (int i = 0; i < n; i++) {
+               for (c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next);
+               if (!c)
+                       for (c = selmon->clients; c && !ISVISIBLE(c); c = 
c->next);
+               if (c && !(c == selmon->sel)) {
+                       c->tags = arg->ui & TAGMASK;
+                       focus(NULL);
+               }
+       }
+       arrange(selmon);
+}
+
+void
 tagmon(const Arg *arg)
 {
        if (!selmon->sel || !mons->next)

Reply via email to