commit e9728a337a0199acb974ef5be024e26af3464e05
parent 13266efb0636d4ee1fa599a75001a3b3307e4c03
Author: Miles Alan <m@milesalan.com>
Date: Sat, 25 Apr 2020 17:48:04 -0500
Deck & deckdouble layouts
Diffstat:
| M | config.def.h | | | 28 | ++++++++++++++++++++++++---- |
| M | dwm.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;