78 lines
2.3 KiB
Diff
78 lines
2.3 KiB
Diff
Author: Chris Noxz <chris@noxz.tech>
|
|
|
|
diff -upN dwm-6.1/config.def.h dwm-nrowgrid-6.1/config.def.h
|
|
--- dwm-6.1/config.def.h 2015-11-08 23:11:48.000000000 +0100
|
|
+++ dwm-nrowgrid-6.1/config.def.h 2018-10-01 10:44:05.631382842 +0200
|
|
@@ -34,11 +34,15 @@ static const float mfact = 0.55; /*
|
|
static const int nmaster = 1; /* number of clients in master area */
|
|
static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
|
|
|
|
+#define FORCE_VSPLIT 1
|
|
+#include "nrowgrid.c"
|
|
+
|
|
static const Layout layouts[] = {
|
|
/* symbol arrange function */
|
|
{ "[]=", tile }, /* first entry is default */
|
|
{ "><>", NULL }, /* no layout function means floating behavior */
|
|
{ "[M]", monocle },
|
|
+ { "###", nrowgrid },
|
|
};
|
|
|
|
/* key definitions */
|
|
diff -upN dwm-6.1/nrowgrid.c dwm-nrowgrid-6.1/nrowgrid.c
|
|
--- dwm-6.1/nrowgrid.c 1970-01-01 01:00:00.000000000 +0100
|
|
+++ dwm-nrowgrid-6.1/nrowgrid.c 2018-10-01 10:44:27.741263063 +0200
|
|
@@ -0,0 +1,52 @@
|
|
+void
|
|
+nrowgrid(Monitor *m)
|
|
+{
|
|
+ unsigned int n = 0, i = 0, ri = 0, ci = 0; /* counters */
|
|
+ unsigned int cx, cy, cw, ch; /* client geometry */
|
|
+ unsigned int uw = 0, uh = 0, uc = 0; /* utilization trackers */
|
|
+ unsigned int cols, rows = m->nmaster + 1;
|
|
+ Client *c;
|
|
+
|
|
+ /* count clients */
|
|
+ for (c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
|
|
+
|
|
+ /* nothing to do here */
|
|
+ if (n == 0)
|
|
+ return;
|
|
+
|
|
+ /* force 2 clients to always split vertically */
|
|
+ if (FORCE_VSPLIT && n == 2)
|
|
+ rows = 1;
|
|
+
|
|
+ /* never allow empty rows */
|
|
+ if (n < rows)
|
|
+ rows = n;
|
|
+
|
|
+ /* define first row */
|
|
+ cols = n / rows;
|
|
+ uc = cols;
|
|
+ cy = m->wy;
|
|
+ ch = m->wh / rows;
|
|
+ uh = ch;
|
|
+
|
|
+ for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) {
|
|
+ if (ci == cols) {
|
|
+ uw = 0;
|
|
+ ci = 0;
|
|
+ ri++;
|
|
+
|
|
+ /* next row */
|
|
+ cols = (n - uc) / (rows - ri);
|
|
+ uc += cols;
|
|
+ cy = m->wy + uh;
|
|
+ ch = (m->wh - uh) / (rows - ri);
|
|
+ uh += ch;
|
|
+ }
|
|
+
|
|
+ cx = m->wx + uw;
|
|
+ cw = (m->ww - uw) / (cols - ci);
|
|
+ uw += cw;
|
|
+
|
|
+ resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, 0);
|
|
+ }
|
|
+}
|