dwm-transferall-6.2.diff (2305B)
1 From 43d8a0f3df28ba0b25b85eb38b0f990b9947c48a Mon Sep 17 00:00:00 2001 2 From: Miles Alan <m@milesalan.com> 3 Date: Sat, 1 Feb 2020 09:55:43 -0600 4 Subject: [PATCH] Add transferall function which swaps the master & stack and 5 adjusts nmaster. 6 7 All stack clients after the function is run are moved into the master area 8 and master clients are moved into the stack area. The new nmaster will be 9 adjusted to be equal to the old number of clients in the stack (e.g. the 10 new number of clients in the master). 11 --- 12 config.def.h | 1 + 13 dwm.c | 26 ++++++++++++++++++++++++++ 14 2 files changed, 27 insertions(+) 15 16 diff --git a/config.def.h b/config.def.h 17 index 1c0b587..cce5b64 100644 18 --- a/config.def.h 19 +++ b/config.def.h 20 @@ -70,6 +70,7 @@ static Key keys[] = { 21 { MODKEY, XK_d, incnmaster, {.i = -1 } }, 22 { MODKEY, XK_h, setmfact, {.f = -0.05} }, 23 { MODKEY, XK_l, setmfact, {.f = +0.05} }, 24 + { MODKEY, XK_z, transferall, {0} }, 25 { MODKEY, XK_Return, zoom, {0} }, 26 { MODKEY, XK_Tab, view, {0} }, 27 { MODKEY|ShiftMask, XK_c, killclient, {0} }, 28 diff --git a/dwm.c b/dwm.c 29 index 4465af1..a8864e9 100644 30 --- a/dwm.c 31 +++ b/dwm.c 32 @@ -213,6 +213,7 @@ static void togglebar(const Arg *arg); 33 static void togglefloating(const Arg *arg); 34 static void toggletag(const Arg *arg); 35 static void toggleview(const Arg *arg); 36 +static void transferall(const Arg *arg); 37 static void unfocus(Client *c, int setfocus); 38 static void unmanage(Client *c, int destroyed); 39 static void unmapnotify(XEvent *e); 40 @@ -1746,6 +1747,31 @@ toggleview(const Arg *arg) 41 } 42 } 43 44 +void 45 +transferall(const Arg *arg) { 46 + Client *c, *n = selmon->clients, *attachfrom = NULL; 47 + int i = 0, nstackclients = 0; 48 + while (n) { 49 + c = n; 50 + n = c->next; 51 + if (!ISVISIBLE(c) || c->isfloating) continue; 52 + if (i >= selmon->nmaster) { 53 + detach(c); 54 + if (!attachfrom) { 55 + attach(c); 56 + } else { 57 + c->next = attachfrom->next; 58 + attachfrom->next = c; 59 + } 60 + attachfrom = c; 61 + nstackclients++; 62 + } 63 + i++; 64 + } 65 + selmon->nmaster = nstackclients; 66 + arrange(selmon); 67 +} 68 + 69 void 70 unfocus(Client *c, int setfocus) 71 { 72 -- 73 2.23.1 74