Fix commit 68ece7f - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) commit 158066bfc7322ab3199dd69de4773ab2cac8d325
(DIR) parent b247b6e1beb9c87969754c0865561de39bfcbe09
(HTM) Author: Lee Phillips <lee@lee-phillips.org>
Date: Mon, 8 Dec 2025 11:48:32 -0600
Fix commit 68ece7f
Including patch file and fixing links in README.
Sorry
Diffstat:
A dwm.suckless.org/patches/bstackmfa… | 221 +++++++++++++++++++++++++++++++
A dwm.suckless.org/patches/bstackmfa… | 21 +++++++++++++++++++++
2 files changed, 242 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/dwm.suckless.org/patches/bstackmfact/dwm-bstackmfact-6.6.diff b/dwm.suckless.org/patches/bstackmfact/dwm-bstackmfact-6.6.diff
@@ -0,0 +1,221 @@
+diff --git a/config.def.h b/config.def.h
+index 9efa774..c0bfede 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -3,6 +3,7 @@
+ /* appearance */
+ static const unsigned int borderpx = 1; /* border pixel of windows */
+ static const unsigned int snap = 32; /* snap pixel */
++static const unsigned int minwsz = 20; /* Minimal heigt of a client for smfact */
+ static const int showbar = 1; /* 0 means no bar */
+ static const int topbar = 1; /* 0 means bottom bar */
+ static const char *fonts[] = { "monospace:size=10" };
+@@ -33,6 +34,7 @@ static const Rule rules[] = {
+
+ /* layout(s) */
+ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
++static const float smfact = 0.00; /* factor of tiled clients [0.00..0.95] */
+ static const int nmaster = 1; /* number of clients in master area */
+ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
+ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
+@@ -42,6 +44,8 @@ static const Layout layouts[] = {
+ { "[]=", tile }, /* first entry is default */
+ { "><>", NULL }, /* no layout function means floating behavior */
+ { "[M]", monocle },
++ { "TTT", bstack },
++ { "===", bstackhoriz },
+ };
+
+ /* key definitions */
+@@ -71,12 +75,16 @@ static const Key keys[] = {
+ { MODKEY, XK_d, incnmaster, {.i = -1 } },
+ { MODKEY, XK_h, setmfact, {.f = -0.05} },
+ { MODKEY, XK_l, setmfact, {.f = +0.05} },
++ { MODKEY|ShiftMask, XK_h, setsmfact, {.f = +0.05} },
++ { MODKEY|ShiftMask, XK_l, setsmfact, {.f = -0.05} },
+ { MODKEY, XK_Return, zoom, {0} },
+ { MODKEY, XK_Tab, view, {0} },
+ { MODKEY|ShiftMask, XK_c, killclient, {0} },
+ { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
+ { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+ { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
++ { MODKEY, XK_s, setlayout, {.v = &layouts[3]} },
++ { MODKEY, XK_z, setlayout, {.v = &layouts[4]} },
+ { MODKEY, XK_space, setlayout, {0} },
+ { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
+ { MODKEY, XK_0, view, {.ui = ~0 } },
+diff --git a/dwm.c b/dwm.c
+index 1443802..1f829b8 100644
+--- a/dwm.c
++++ b/dwm.c
+@@ -70,6 +70,7 @@ typedef union {
+ int i;
+ unsigned int ui;
+ float f;
++ float sf;
+ const void *v;
+ } Arg;
+
+@@ -113,6 +114,7 @@ typedef struct {
+ struct Monitor {
+ char ltsymbol[16];
+ float mfact;
++ float smfact;
+ int nmaster;
+ int num;
+ int by; /* bar geometry */
+@@ -201,6 +203,7 @@ static void setfocus(Client *c);
+ static void setfullscreen(Client *c, int fullscreen);
+ static void setlayout(const Arg *arg);
+ static void setmfact(const Arg *arg);
++static void setsmfact(const Arg *arg);
+ static void setup(void);
+ static void seturgent(Client *c, int urg);
+ static void showhide(Client *c);
+@@ -232,6 +235,8 @@ static int xerror(Display *dpy, XErrorEvent *ee);
+ static int xerrordummy(Display *dpy, XErrorEvent *ee);
+ static int xerrorstart(Display *dpy, XErrorEvent *ee);
+ static void zoom(const Arg *arg);
++static void bstack(Monitor *m);
++static void bstackhoriz(Monitor *m);
+
+ /* variables */
+ static const char broken[] = "broken";
+@@ -633,10 +638,10 @@ Monitor *
+ createmon(void)
+ {
+ Monitor *m;
+-
+ m = ecalloc(1, sizeof(Monitor));
+ m->tagset[0] = m->tagset[1] = 1;
+ m->mfact = mfact;
++ m->smfact = smfact;
+ m->nmaster = nmaster;
+ m->showbar = showbar;
+ m->topbar = topbar;
+@@ -1535,6 +1540,20 @@ setmfact(const Arg *arg)
+ arrange(selmon);
+ }
+
++ void
++setsmfact(const Arg *arg) {
++ float sf;
++
++ if(!arg || !selmon->lt[selmon->sellt]->arrange)
++ return;
++ sf = arg->sf < 1.0 ? arg->sf + selmon->smfact : arg->sf - 1.0;
++ if(sf < 0 || sf > 0.9)
++ return;
++ selmon->smfact = sf;
++ arrange(selmon);
++}
++
++
+ void
+ setup(void)
+ {
+@@ -1686,7 +1705,7 @@ tagmon(const Arg *arg)
+ void
+ tile(Monitor *m)
+ {
+- unsigned int i, n, h, mw, my, ty;
++ unsigned int i, n, h, smh, mw, my, ty;
+ Client *c;
+
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+@@ -1704,9 +1723,22 @@ tile(Monitor *m)
+ if (my + HEIGHT(c) < m->wh)
+ my += HEIGHT(c);
+ } else {
+- h = (m->wh - ty) / (n - i);
+- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
+- if (ty + HEIGHT(c) < m->wh)
++ smh = m->mh * m->smfact;
++ if(!(nexttiled(c->next)))
++ h = (m->wh - ty) / (n - i);
++ else
++ h = (m->wh - smh - ty) / (n - i);
++ if(h < minwsz) {
++ c->isfloating = True;
++ XRaiseWindow(dpy, c->win);
++ resize(c, m->mx + (m->mw / 2 - WIDTH(c) / 2), m->my + (m->mh / 2 - HEIGHT(c) / 2), m->ww - mw - (2*c->bw), h - (2*c->bw), False);
++ ty -= HEIGHT(c);
++ }
++ else
++ resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), False);
++ if(!(nexttiled(c->next)))
++ ty += HEIGHT(c) + smh;
++ else
+ ty += HEIGHT(c);
+ }
+ }
+@@ -2162,3 +2194,69 @@ main(int argc, char *argv[])
+ XCloseDisplay(dpy);
+ return EXIT_SUCCESS;
+ }
++
++static void
++bstack(Monitor *m) {
++ int w, h, mh, mx, tx, ty, tw, tws;
++ unsigned int i, n;
++ Client *c;
++
++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
++ if (n == 0)
++ return;
++ if (n > m->nmaster) {
++ mh = m->nmaster ? m->mfact * m->wh : 0;
++ tw = m->ww / (n - m->nmaster);
++ ty = m->wy + mh;
++ } else {
++ mh = m->wh;
++ tw = m->ww;
++ ty = m->wy;
++ }
++ for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
++ if (i < m->nmaster) {
++ w = (m->ww - mx) / (MIN(n, m->nmaster) - i);
++ resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 * c->bw), 0);
++ mx += WIDTH(c);
++ } else {
++ h = m->wh - mh;
++ if (i == m->nmaster) {
++ tws = (n > 2) ? tw + m->mw * m->smfact / 2: tw;}
++ else {
++ tws = tw - m->mw * m->smfact/MAX(n-2, 1) / 2;}
++ resize(c, tx, ty, tws - (2 * c->bw), h - (2 * c->bw), 0);
++ if (tw != m->ww)
++ tx += WIDTH(c);
++ }
++ }
++}
++
++static void
++bstackhoriz(Monitor *m) {
++ int w, mh, mx, tx, ty, th;
++ unsigned int i, n;
++ Client *c;
++
++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
++ if (n == 0)
++ return;
++ if (n > m->nmaster) {
++ mh = m->nmaster ? m->mfact * m->wh : 0;
++ th = (m->wh - mh) / (n - m->nmaster);
++ ty = m->wy + mh;
++ } else {
++ th = mh = m->wh;
++ ty = m->wy;
++ }
++ for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
++ if (i < m->nmaster) {
++ w = (m->ww - mx) / (MIN(n, m->nmaster) - i);
++ resize(c, m->wx + mx, m->wy, w - (2 * c->bw), mh - (2 * c->bw), 0);
++ mx += WIDTH(c);
++ } else {
++ resize(c, tx, ty, m->ww - (2 * c->bw), th - (2 * c->bw), 0);
++ if (th != m->wh)
++ ty += HEIGHT(c);
++ }
++ }
++}
(DIR) diff --git a/dwm.suckless.org/patches/bstackmfact/index.md b/dwm.suckless.org/patches/bstackmfact/index.md
@@ -0,0 +1,21 @@
+bmstackmfact
+============
+
+Description
+-----------
+Updates and combines the [bottomstack patch](../bottomstack/) and the
+[stackmfact patch](../stackmfact). Invoking the `setsmfact` function
+(default binding shift-mod-[h,l]) with the bottomstack
+layout changes the width of the first client in the
+stack and distrubutes the remaining screen width equally among the
+remaining clients. The effect of `setmfact` on the tiling layout
+remains as in the original stackmfact patch.
+
+Download
+--------
+[dwm-bstackmfact-6.6.diff](dwm-bstackmfact-6.6.diff)
+
+Author
+------
+[Lee Phillips](https://lee-phillips.org/) - <lee at lee-phillips.org>
+