commit 847586dc0b3b0292eeef69474e2b25dd527ad00e
Author: Chris Down <[email protected]>
Date:   Mon Apr 20 13:55:40 2020 +0100

    patches: Add resetlayout patch

diff --git 
a/dwm.suckless.org/patches/resetlayout/dwm-resetlayout-20200420-c82db69.diff 
b/dwm.suckless.org/patches/resetlayout/dwm-resetlayout-20200420-c82db69.diff
new file mode 100644
index 00000000..61097aff
--- /dev/null
+++ b/dwm.suckless.org/patches/resetlayout/dwm-resetlayout-20200420-c82db69.diff
@@ -0,0 +1,52 @@
+diff --git config.def.h config.def.h
+index 1c0b587..eb823d3 100644
+--- config.def.h
++++ config.def.h
+@@ -70,6 +70,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,      resetlayout,    {0} },
+       { MODKEY,                       XK_Return, zoom,           {0} },
+       { MODKEY,                       XK_Tab,    view,           {0} },
+       { MODKEY|ShiftMask,             XK_c,      killclient,     {0} },
+diff --git dwm.c dwm.c
+index 4465af1..75fe777 100644
+--- dwm.c
++++ dwm.c
+@@ -188,6 +188,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 resetlayout(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);
+@@ -1265,6 +1266,16 @@ recttomon(int x, int y, int w, int h)
+       return r;
+ }
+ 
++void
++resetlayout(const Arg *arg)
++{
++      Arg default_layout = {.v = &layouts[0]};
++      Arg default_mfact = {.f = mfact + 1};
++
++      setlayout(&default_layout);
++      setmfact(&default_mfact);
++}
++
+ void
+ resize(Client *c, int x, int y, int w, int h, int interact)
+ {
+@@ -1282,6 +1293,10 @@ resizeclient(Client *c, int x, int y, int w, int h)
+       c->oldw = c->w; c->w = wc.width = w;
+       c->oldh = c->h; c->h = wc.height = h;
+       wc.border_width = c->bw;
++
++      if ((nexttiled(c->mon->clients) == c) && !(nexttiled(c->next)))
++              resetlayout(NULL);
++
+       XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, 
&wc);
+       configure(c);
+       XSync(dpy, False);
diff --git a/dwm.suckless.org/patches/resetlayout/index.md 
b/dwm.suckless.org/patches/resetlayout/index.md
new file mode 100644
index 00000000..e00b2fd7
--- /dev/null
+++ b/dwm.suckless.org/patches/resetlayout/index.md
@@ -0,0 +1,22 @@
+resetlayout
+===========
+
+Description
+-----------
+
+Resets the layout and mfact if there is only one client visible.
+
+This applies cleanly to vanilla dwm, but is mostly only useful alongside the
+[pertag](../pertag/) patch, since otherwise all layouts and mfacts will be
+reset.
+
+You can also set a binding to trigger this on demand, see the new call to
+resetlayout in config.def.h.
+
+Download
+--------
+* 
[dwm-attachaside-20200420-c82db69.diff](dwm-resetlayout-20200420-c82db69.diff)
+
+Authors
+-------
+* Chris Down - <[email protected]>


Reply via email to