summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzachir <zachir@librem.one>2021-06-17 21:24:59 -0500
committerzachir <zachir@librem.one>2021-06-17 21:31:25 -0500
commit631bcee3d0ea470171f23c041b3babdaaadd0d0d (patch)
tree74d4ee3569da4c55800ccd474bf81bc6df367fe7
parent409a12708a63591dec68c57037f658ff75aebbb5 (diff)
Add triple column layout
-rw-r--r--config.def.h3
-rw-r--r--tcl.c74
2 files changed, 77 insertions, 0 deletions
diff --git a/config.def.h b/config.def.h
index 9b6eba9..a66fbe2 100644
--- a/config.def.h
+++ b/config.def.h
@@ -61,11 +61,13 @@ 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 int attachbelow = 1; /* 1 means attach after the currently active window */
+#include "tcl.c"
static const Layout layouts[] = {
/* symbol arrange function */
{ "[]=", tile }, /* first entry is default */
{ "><>", NULL }, /* no layout function means floating behavior */
{ "[M]", monocle },
+ { "|||", tcl },
};
/* key definitions */
@@ -105,6 +107,7 @@ static Key keys[] = {
{ MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
{ MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
{ MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY|ShiftMask, XK_t, setlayout, {.v = &layouts[3]} },
{ MODKEY, XK_space, setlayout, {0} },
{ MODKEY|ShiftMask, XK_space, togglefloating, {0} },
{ MODKEY|ShiftMask, XK_f, togglefullscr, {0} },
diff --git a/tcl.c b/tcl.c
new file mode 100644
index 0000000..4c94914
--- /dev/null
+++ b/tcl.c
@@ -0,0 +1,74 @@
+void
+tcl(Monitor * m)
+{
+ int x, y, h, w, mw, sw, bdw;
+ unsigned int i, n;
+ Client * c;
+
+ for (n = 0, c = nexttiled(m->clients); c;
+ c = nexttiled(c->next), n++);
+
+ if (n == 0)
+ return;
+
+ c = nexttiled(m->clients);
+
+ mw = m->mfact * m->ww;
+ sw = (m->ww - mw) / 2;
+ bdw = (2 * c->bw);
+ resize(c,
+ n < 3 ? m->wx : m->wx + sw,
+ m->wy,
+ n == 1 ? m->ww - bdw : mw - bdw,
+ m->wh - bdw,
+ False);
+
+ if (--n == 0)
+ return;
+
+ w = (m->ww - mw) / ((n > 1) + 1);
+ c = nexttiled(c->next);
+
+ if (n > 1)
+ {
+ x = m->wx + ((n > 1) ? mw + sw : mw);
+ y = m->wy;
+ h = m->wh / (n / 2);
+
+ if (h < bh)
+ h = m->wh;
+
+ for (i = 0; c && i < n / 2; c = nexttiled(c->next), i++)
+ {
+ resize(c,
+ x,
+ y,
+ w - bdw,
+ (i + 1 == n / 2) ? m->wy + m->wh - y - bdw : h - bdw,
+ False);
+
+ if (h != m->wh)
+ y = c->y + HEIGHT(c);
+ }
+ }
+
+ x = (n + 1 / 2) == 1 ? mw : m->wx;
+ y = m->wy;
+ h = m->wh / ((n + 1) / 2);
+
+ if (h < bh)
+ h = m->wh;
+
+ for (i = 0; c; c = nexttiled(c->next), i++)
+ {
+ resize(c,
+ x,
+ y,
+ (i + 1 == (n + 1) / 2) ? w - bdw : w - bdw,
+ (i + 1 == (n + 1) / 2) ? m->wy + m->wh - y - bdw : h - bdw,
+ False);
+
+ if (h != m->wh)
+ y = c->y + HEIGHT(c);
+ }
+}