From b254f8ee58a3389cd123df7041ea0eeab8f68bf2 Mon Sep 17 00:00:00 2001 From: kske Date: Sun, 4 Apr 2021 09:37:26 +0200 Subject: [PATCH] Apply reorganizetags patch (6.2) --- config.def.h | 1 + dwm.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/config.def.h b/config.def.h index 568a5da..d08b43b 100644 --- a/config.def.h +++ b/config.def.h @@ -73,6 +73,7 @@ static Key keys[] = { { MODKEY, XK_d, incnmaster, {.i = -1 } }, { MODKEY, XK_h, setmfact, {.f = -0.05} }, { MODKEY, XK_l, setmfact, {.f = +0.05} }, + { MODKEY, XK_r, reorganizetags, {0} }, { MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Tab, view, {0} }, { MODKEY|ShiftMask, XK_c, killclient, {0} }, diff --git a/dwm.c b/dwm.c index 02ff0da..db34420 100644 --- a/dwm.c +++ b/dwm.c @@ -200,6 +200,7 @@ 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 reorganizetags(const Arg *arg); static void resize(Client *c, int x, int y, int w, int h, int interact); static void resizeclient(Client *c, int x, int y, int w, int h); static void resizemouse(const Arg *arg); @@ -1348,6 +1349,33 @@ recttomon(int x, int y, int w, int h) return r; } +void +reorganizetags(const Arg *arg) { + Client *c; + unsigned int occ, unocc, i; + unsigned int tagdest[LENGTH(tags)]; + + occ = 0; + for (c = selmon->clients; c; c = c->next) + occ |= (1 << (ffs(c->tags)-1)); + unocc = 0; + for (i = 0; i < LENGTH(tags); ++i) { + while (unocc < i && (occ & (1 << unocc))) + unocc++; + if (occ & (1 << i)) { + tagdest[i] = unocc; + occ &= ~(1 << i); + occ |= 1 << unocc; + } + } + + for (c = selmon->clients; c; c = c->next) + c->tags = 1 << tagdest[ffs(c->tags)-1]; + if (selmon->sel) + selmon->tagset[selmon->seltags] = selmon->sel->tags; + arrange(selmon); +} + void resize(Client *c, int x, int y, int w, int h, int interact) {