From a70fd955bacbc6465d1ed7d523477f0cd4725ab7 Mon Sep 17 00:00:00 2001 From: Malfurious Date: Thu, 27 Jan 2022 03:46:21 -0500 Subject: patch: columns This patch adds an extra layout to dwm called col in which the windows in the master area are arranged in colums of equal size. The number of columns is always nmaster + 1, and the last column is a stack of leftover windows just like the normal tile layout. It effectively acts like the default tiling mode, except provides for vertical instead of horizontal master windows. --- dwm.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'dwm.c') diff --git a/dwm.c b/dwm.c index 3219c52..e7077a7 100644 --- a/dwm.c +++ b/dwm.c @@ -155,6 +155,7 @@ static void checkotherwm(void); static void cleanup(void); static void cleanupmon(Monitor *mon); static void clientmessage(XEvent *e); +static void col(Monitor *); static void configure(Client *c); static void configurenotify(XEvent *e); static void configurerequest(XEvent *e); @@ -1692,6 +1693,32 @@ tagmon(const Arg *arg) sendmon(selmon->sel, dirtomon(arg->i)); } +void +col(Monitor *m) +{ + unsigned int i, n, h, w, x, y, mw; + 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; + else + mw = m->ww; + for (i = x = y = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { + w = (mw - x) / (MIN(n, m->nmaster) - i); + resize(c, x + m->wx, m->wy, w - (2 * c->bw), m->wh - (2 * c->bw), 0); + x += WIDTH(c); + } else { + h = (m->wh - y) / (n - i); + resize(c, x + m->wx, m->wy + y, m->ww - x - (2 * c->bw), h - (2 * c->bw), 0); + y += HEIGHT(c); + } +} + void tile(Monitor *m) { -- cgit v1.2.3