sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

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