diff options
author | Malfurious <m@lfurio.us> | 2024-02-29 11:52:31 -0500 |
---|---|---|
committer | Malfurious <m@lfurio.us> | 2024-03-05 21:04:47 -0500 |
commit | c487d2524a1c8429b74285ef05557fb408483da0 (patch) | |
tree | ea0c93a2e074ec022b4c4b99d45ceb315f5f8f7a | |
parent | 5746fa052056ef9d254996597b63ad0757c1e9cc (diff) | |
download | dwm-c487d2524a1c8429b74285ef05557fb408483da0.tar.gz dwm-c487d2524a1c8429b74285ef05557fb408483da0.zip |
patch: resetlayout
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 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.
This patch also resets nmaster to its default value as well.
-rw-r--r-- | config.def.h | 1 | ||||
-rw-r--r-- | dwm.c | 16 |
2 files changed, 17 insertions, 0 deletions
diff --git a/config.def.h b/config.def.h index c0dfdd4..9f6f41e 100644 --- a/config.def.h +++ b/config.def.h @@ -97,6 +97,7 @@ static const Key keys[] = { { MODKEY, XK_l, setmfact, {.f = +0.05} }, { MODKEY|ShiftMask, XK_j, pushdown, {0} }, { MODKEY|ShiftMask, XK_k, pushup, {0} }, + { MODKEY, XK_r, resetlayout, {0} }, { MODKEY, XK_Return, zoom, {0} }, { MODKEY, XK_Tab, view, {0} }, { MODKEY, XK_q, killclient, {0} }, @@ -202,6 +202,7 @@ static void pushdown(const Arg *arg); static void pushup(const Arg *arg); 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); @@ -1491,6 +1492,18 @@ recttomon(int x, int y, int w, int h) } void +resetlayout(const Arg *arg) +{ + Arg default_layout = {.v = &layouts[0]}; + Arg default_mfact = {.f = mfact + 1}; + Arg default_nmaster = {.i = nmaster - selmon->nmaster}; + + setlayout(&default_layout); + setmfact(&default_mfact); + incnmaster(&default_nmaster); +} + +void resize(Client *c, int x, int y, int w, int h, int interact) { if (applysizehints(c, &x, &y, &w, &h, interact)) @@ -2062,6 +2075,9 @@ unmanage(Client *c, int destroyed) focus(NULL); updateclientlist(); arrange(m); + + if (nexttiled(m->clients) == NULL) + resetlayout(NULL); } void |