My configuration of sxmo fork of suckless dwm.

git clone git://watertao.xyz/programs/sxmo-dwm.git

commit e9728a337a0199acb974ef5be024e26af3464e05
parent 13266efb0636d4ee1fa599a75001a3b3307e4c03
Author: Miles Alan <m@milesalan.com>
Date:   Sat, 25 Apr 2020 17:48:04 -0500

Deck & deckdouble layouts

Diffstat:
Mconfig.def.h | 28++++++++++++++++++++++++----
Mdwm.c | 50++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 74 insertions(+), 4 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -49,9 +49,12 @@ static void (*bartabfloatfns[])(Monitor *) = { NULL /* , customlayoutfn */ }; static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ - { "|_|", bstack }, - { "[ ]", monocle }, { NULL, NULL }, + { "[ ]", monocle }, + { "DD", deckdouble}, + { "D", deck}, + + { "|_|", bstack }, }; /* key definitions */ @@ -94,6 +97,8 @@ static Key keys[] = { { 0, MODKEY, XK_b, togglebar, {0} }, { 0, MODKEY, XK_j, focusstack, {.i = +1 } }, { 0, MODKEY, XK_k, focusstack, {.i = -1 } }, + { 0, MODKEY|ShiftMask, XK_j, rotatestack, {.i = -1} }, + { 0, MODKEY|ShiftMask, XK_k, rotatestack, {.i = +1} }, { 0, MODKEY, XK_i, incnmaster, {.i = +1 } }, { 0, MODKEY, XK_o, incnmaster, {.i = -1 } }, { 0, MODKEY, XK_h, setmfact, {.f = -0.05} }, @@ -101,17 +106,32 @@ static Key keys[] = { { 0, MODKEY, XK_Return, zoom, {0} }, { 0, MODKEY, XK_Tab, view, {0} }, { 0, MODKEY|ShiftMask, XK_c, killclient, {0} }, - { 0, MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, - { 0, MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, + + /* float */ + { 0, MODKEY, XK_n, setlayout, {.v = &layouts[1]} }, + /* monocle */ { 0, MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, + /* deck double */ + { 0, MODKEY, XK_comma, setlayout, {.v = &layouts[3]} }, + /* deck */ + { 0, MODKEY, XK_period, setlayout, {.v = &layouts[4]} }, + /* tile */ + { 0, MODKEY, XK_slash, setlayout, {.v = &layouts[0]} }, + { 0, MODKEY|ShiftMask, XK_slash, setlayout, {.v = &layouts[0]} }, + + { 0, MODKEY, XK_space, setlayout, {0} }, { 0, MODKEY|ShiftMask, XK_space, togglefloating, {0} }, { 0, MODKEY, XK_0, view, {.ui = ~0 } }, { 0, MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, + + /* { 0, MODKEY, XK_comma, focusmon, {.i = -1 } }, { 0, MODKEY, XK_period, focusmon, {.i = +1 } }, { 0, MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, { 0, MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, + */ + TAGKEYS( XK_1, 0) TAGKEYS( XK_2, 1) TAGKEYS( XK_3, 2) diff --git a/dwm.c b/dwm.c @@ -167,6 +167,8 @@ static void configurenotify(XEvent *e); static void configurerequest(XEvent *e); static Monitor *createmon(void); static void cyclelayout(const Arg *arg); +static void deck(Monitor *m); +static void deckdouble(Monitor *m); static void destroynotify(XEvent *e); static void detach(Client *c); static void detachstack(Client *c); @@ -664,6 +666,54 @@ cleanup(void) } void +deck(Monitor *m) { + unsigned int i, n, h, mw, my; + Client *c; + + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if(n == 0) + return; + + if(n > m->nmaster) { + mw = m->nmaster ? m->ww * m->mfact : 0; + snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n - m->nmaster); + } + 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*c->bw), h - (2*c->bw), False); + my += HEIGHT(c); + } + else + resize(c, m->wx + mw, m->wy, m->ww - mw - (2*c->bw), m->wh - (2*c->bw), False); +} + +void +deckdouble(Monitor *m) { + unsigned int i, n, h, mw, ns; + Client *c; + + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if(n == 0) + return; + + if(n > m->nmaster) { + mw = m->nmaster ? m->ww * m->mfact : 0; + ns = m->nmaster > 0 ? 2 : 1; + } else { + mw = m->ww; + ns = 1; + } + for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if(i < m->nmaster) + resize(c, m->wx, m->wy, mw - (2*c->bw), m->wh - (2*c->bw), False); + else + resize(c, m->wx + mw, m->wy, m->ww - mw - (2*c->bw), m->wh - (2*c->bw), False); +} + +void cleanupmon(Monitor *mon) { Monitor *m;