URI: 
       apply nmaster patch - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b1a28ae1dab34a159e7cf17a82ecda0635e72f97
   DIR parent f68a01cd767659190bf690e29986184348672647
  HTML Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Tue, 25 Oct 2011 20:40:46 +0100
       
       apply nmaster patch
       Diffstat:
         M config.def.h                        |       3 +++
         M dwm.c                               |      42 ++++++++++++++++----------------
       
       2 files changed, 24 insertions(+), 21 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       @@ -24,6 +24,7 @@ static const Rule rules[] = {
        
        /* layout(s) */
        static const float mfact      = 0.55; /* factor of master area size [0.05..0.95] */
       +static const int nmaster      = 1;    /* number of clients in master area */
        static const Bool resizehints = True; /* True means respect size hints in tiled resizals */
        
        static const Layout layouts[] = {
       @@ -55,6 +56,8 @@ static Key keys[] = {
                { MODKEY,                       XK_b,      togglebar,      {0} },
                { MODKEY,                       XK_j,      focusstack,     {.i = +1 } },
                { MODKEY,                       XK_k,      focusstack,     {.i = -1 } },
       +        { MODKEY,                       XK_i,      incnmaster,     {.i = +1 } },
       +        { MODKEY,                       XK_d,      incnmaster,     {.i = -1 } },
                { MODKEY,                       XK_h,      setmfact,       {.f = -0.05} },
                { MODKEY,                       XK_l,      setmfact,       {.f = +0.05} },
                { MODKEY,                       XK_Return, zoom,           {0} },
   DIR diff --git a/dwm.c b/dwm.c
       @@ -125,6 +125,7 @@ typedef struct {
        struct Monitor {
                char ltsymbol[16];
                float mfact;
       +        int nmaster;
                int num;
                int by;               /* bar geometry */
                int mx, my, mw, mh;   /* screen size */
       @@ -189,6 +190,7 @@ static long getstate(Window w);
        static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
        static void grabbuttons(Client *c, Bool focused);
        static void grabkeys(void);
       +static void incnmaster(const Arg *arg);
        static void initfont(const char *fontstr);
        static void keypress(XEvent *e);
        static void killclient(const Arg *arg);
       @@ -664,6 +666,7 @@ createmon(void) {
                        die("fatal: could not malloc() %u bytes\n", sizeof(Monitor));
                m->tagset[0] = m->tagset[1] = 1;
                m->mfact = mfact;
       +        m->nmaster = nmaster;
                m->showbar = showbar;
                m->topbar = topbar;
                m->lt[0] = &layouts[0];
       @@ -1024,6 +1027,12 @@ grabkeys(void) {
        }
        
        void
       +incnmaster(const Arg *arg) {
       +        selmon->nmaster = MAX(selmon->nmaster + arg->i, 1);
       +        arrange(selmon);
       +}
       +
       +void
        initfont(const char *fontstr) {
                char *def, **missing;
                int n;
       @@ -1650,32 +1659,23 @@ textnw(const char *text, unsigned int len) {
        
        void
        tile(Monitor *m) {
       -        int x, y, h, w, mw;
       -        unsigned int i, n;
       +        unsigned int i, n, mw, mh, tw, th;
                Client *c;
        
                for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
                if(n == 0)
                        return;
       -        /* master */
       -        c = nexttiled(m->clients);
       -        mw = m->mfact * m->ww;
       -        resize(c, m->wx, m->wy, (n == 1 ? m->ww : mw) - 2 * c->bw, m->wh - 2 * c->bw, False);
       -        if(--n == 0)
       -                return;
       -        /* tile stack */
       -        x = (m->wx > c->x) ? c->x + mw + 2 * c->bw : m->wx + mw;
       -        y = m->wy;
       -        w = (m->wx > c->x) ? m->wx + m->ww - x : m->ww - mw;
       -        h = m->wh / n;
       -        if(h < bh)
       -                h = m->wh;
       -        for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
       -                resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
       -                       ? m->wy + m->wh - y - 2 * c->bw : h - 2 * c->bw), False);
       -                if(h != m->wh)
       -                        y = c->y + HEIGHT(c);
       -        }
       +
       +        mh = (n > m->nmaster) ? m->wh / m->nmaster : m->wh / n;
       +        mw = (n > m->nmaster) ? m->ww * m->mfact : m->ww;
       +        th = (n > m->nmaster) ? m->wh / (n - m->nmaster) : 0;
       +        tw = m->ww - mw;
       +
       +        for(i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
       +                if(i < m->nmaster)
       +                        resize(c, m->wx, m->wy + (i*mh), mw - (2*c->bw), mh - (2*c->bw), False);
       +                else
       +                        resize(c, m->wx + mw, m->wy + ((i - m->nmaster)*th), tw - (2*c->bw), th - (2*c->bw), False);
        }
        
        void