bloated-dwm-exkc/patches/dwm-nrowgrid-6.1.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);
+ }
+}