dwm-nrowgrid-6.1.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       dwm-nrowgrid-6.1.diff (2308B)
       ---
            1 Author: Chris Noxz <chris@noxz.tech>
            2 
            3 diff -upN dwm-6.1/config.def.h dwm-nrowgrid-6.1/config.def.h
            4 --- dwm-6.1/config.def.h        2015-11-08 23:11:48.000000000 +0100
            5 +++ dwm-nrowgrid-6.1/config.def.h        2018-10-01 10:44:05.631382842 +0200
            6 @@ -34,11 +34,15 @@ static const float mfact     = 0.55; /*
            7  static const int nmaster     = 1;    /* number of clients in master area */
            8  static const int resizehints = 1;    /* 1 means respect size hints in tiled resizals */
            9  
           10 +#define FORCE_VSPLIT 1
           11 +#include "nrowgrid.c"
           12 +
           13  static const Layout layouts[] = {
           14          /* symbol     arrange function */
           15          { "[]=",      tile },    /* first entry is default */
           16          { "><>",      NULL },    /* no layout function means floating behavior */
           17          { "[M]",      monocle },
           18 +        { "###",      nrowgrid },
           19  };
           20  
           21  /* key definitions */
           22 diff -upN dwm-6.1/nrowgrid.c dwm-nrowgrid-6.1/nrowgrid.c
           23 --- dwm-6.1/nrowgrid.c        1970-01-01 01:00:00.000000000 +0100
           24 +++ dwm-nrowgrid-6.1/nrowgrid.c        2018-10-01 10:44:27.741263063 +0200
           25 @@ -0,0 +1,52 @@
           26 +void
           27 +nrowgrid(Monitor *m)
           28 +{
           29 +    unsigned int n = 0, i = 0, ri = 0, ci = 0;  /* counters */
           30 +    unsigned int cx, cy, cw, ch;                /* client geometry */
           31 +    unsigned int uw = 0, uh = 0, uc = 0;        /* utilization trackers */
           32 +    unsigned int cols, rows = m->nmaster + 1;
           33 +    Client *c;
           34 +
           35 +    /* count clients */
           36 +    for (c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
           37 +
           38 +    /* nothing to do here */
           39 +    if (n == 0)
           40 +        return;
           41 +
           42 +    /* force 2 clients to always split vertically */
           43 +    if (FORCE_VSPLIT && n == 2)
           44 +        rows = 1;
           45 +
           46 +    /* never allow empty rows */
           47 +    if (n < rows)
           48 +        rows = n;
           49 +
           50 +    /* define first row */
           51 +    cols = n / rows;
           52 +    uc = cols;
           53 +    cy = m->wy;
           54 +    ch = m->wh / rows;
           55 +    uh = ch;
           56 +
           57 +    for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) {
           58 +        if (ci == cols) {
           59 +            uw = 0;
           60 +            ci = 0;
           61 +            ri++;
           62 +
           63 +            /* next row */
           64 +            cols = (n - uc) / (rows - ri);
           65 +            uc += cols;
           66 +            cy = m->wy + uh;
           67 +            ch = (m->wh - uh) / (rows - ri);
           68 +            uh += ch;
           69 +        }
           70 +
           71 +        cx = m->wx + uw;
           72 +        cw = (m->ww - uw) / (cols - ci);
           73 +        uw += cw;
           74 +
           75 +        resize(c, cx, cy, cw - 2 * c->bw, ch - 2 * c->bw, 0);
           76 +    }
           77 +}