dwm
dynamic window manager
git clone https://9o.is/git/dwm.git
commit d52905cf5305c0d0d194013765214c119f338b18 parent 355d67d850a51d7b6cad9472b73be74baae9df5a Author: Jul <jul@9o.is> Date: Mon, 2 Feb 2026 01:19:03 -0500 add deck layout Diffstat:
| M | config.def.h | | | 2 | ++ |
| M | config.h | | | 2 | ++ |
| M | dwm.c | | | 31 | +++++++++++++++++++++++++++++++ |
3 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/config.def.h b/config.def.h @@ -45,6 +45,7 @@ static const Layout layouts[] = { { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "[]D", deck }, }; /* key definitions */ @@ -87,6 +88,7 @@ static const Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_r, setlayout, {.v = &layouts[3]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|Mod4Mask, XK_space, toggleforegrounded, {0} }, { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, diff --git a/config.h b/config.h @@ -39,6 +39,7 @@ static const Layout layouts[] = { { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, + { "[]D", deck }, }; /* key definitions */ @@ -79,6 +80,7 @@ static const Key keys[] = { { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_r, setlayout, {.v = &layouts[3]} }, { MODKEY, XK_space, setlayout, {0} }, { MODKEY|ControlMask, XK_space, togglefloating, {0} }, { MODKEY|Mod1Mask, XK_space, toggleforegrounded, {0} }, diff --git a/dwm.c b/dwm.c @@ -164,6 +164,7 @@ static void configure(Client *c); static void configurenotify(XEvent *e); static void configurerequest(XEvent *e); static Monitor *createmon(void); +static void deck(Monitor *m); static void destroynotify(XEvent *e); static void detach(Client *c); static void detachstack(Client *c); @@ -707,6 +708,36 @@ createmon(void) } void +deck(Monitor *m) +{ + unsigned int i, n, h, mw, my, bw; + Client *c; + + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if(n == 0) + return; + + if (n == 1) + bw = 0; + else + bw = borderpx; + + if(n > m->nmaster) { + mw = m->nmaster ? m->ww * m->mfact : 0; + } + else + mw = m->ww; + for (i = my = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + h = (m->wh - my) / (MIN(n, m->nmaster) - i); + resize(c, m->wx, m->wy + my, mw - 2*bw, h - 2*bw, bw, 0); + my += HEIGHT(c); + } else { + resize(c, m->wx + mw, m->wy, m->ww - mw - 2*bw, m->wh - 2*bw, bw, 0); + } +} + +void destroynotify(XEvent *e) { Client *c;