sites

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 450e0bb7622dc1155bd31cd9f8767878e340e41f
parent d368938b614845337b17cc3d75be7cfb37f04222
Author: Johannes Hofmann <Johannes.Hofmann@gmx.de>
Date:   Fri, 10 Dec 2010 12:15:30 +0100

add nmaster-ncol.c patch
Diffstat:
Adwm.suckless.org/patches/nmaster-ncol.c | 163+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdwm.suckless.org/patches/nmaster.md | 1+
2 files changed, 164 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/nmaster-ncol.c b/dwm.suckless.org/patches/nmaster-ncol.c @@ -0,0 +1,163 @@ +enum {MaxMon = 8}; +static int nmasters[MaxMon]; +static int initnm = 0; + +static void +initnmaster(void) { + int i; + + if(initnm) + return; + for(i = 0; i < MaxMon; i++) + nmasters[i] = nmaster; + initnm = 1; +} + +static void +incnmaster(const Arg *arg) { + if(!arg || !selmon->lt[selmon->sellt]->arrange || selmon->num >= MaxMon) + return; + nmasters[selmon->num] += arg->i; + if(nmasters[selmon->num] < 0) + nmasters[selmon->num] = 0; + arrange(NULL); +} + +static void +setnmaster(const Arg *arg) { + if(!arg || !selmon->lt[selmon->sellt]->arrange || selmon->num >= MaxMon) + return; + nmasters[selmon->num] = arg->i > 0 ? arg->i : 0; + arrange(NULL); +} + +static void +ntile(Monitor *m) { + int x, y, h, w, mw, nm; + unsigned int i, n; + Client *c; + + initnmaster(); + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + c = nexttiled(m->clients); + nm = m->num < MaxMon ? nmasters[m->num] : nmaster; + if(nm > n) + nm = n; + /* master */ + if(nm > 0) { + mw = m->mfact * m->ww; + h = m->wh / nm; + if(h < bh) + h = m->wh; + y = m->wy; + for(i = 0; i < nm; i++, c = nexttiled(c->next)) { + resize(c, m->wx, y, (n == nm ? m->ww : mw) - 2 * c->bw, + ((i + 1 == nm) ? m->wy + m->wh - y : h) - 2 * c->bw, False); + if(h != m->wh) + y = c->y + HEIGHT(c); + } + n -= nm; + } else + mw = 0; + if(n == 0) + return; + /* tile stack */ + x = m->wx + mw; + y = m->wy; + w = m->ww - mw; + h = m->wh / n; + if(h < bh) + h = m->wh; + for(i = 0; c; c = nexttiled(c->next), i++) { + resize(c, x, y, w - 2 * c->bw, + ((i + 1 == n) ? m->wy + m->wh - y : h) - 2 * c->bw, False); + if(h != m->wh) + y = c->y + HEIGHT(c); + } +} + +static void +ncol(Monitor *m) { + int x, y, h, w, mw, nm; + unsigned int i, n; + Client *c; + + initnmaster(); + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + c = nexttiled(m->clients); + nm = m->num < MaxMon ? nmasters[m->num] : nmaster; + if(nm > n) + nm = n; + /* master */ + if(nm > 0) { + mw = (n == nm) ? m->ww : m->mfact * m->ww; + w = mw / nm; + x = m->wx; + for(i = 0; i < nm; i++, c = nexttiled(c->next)) { + resize(c, x, m->wy, w - 2 * c->bw, m->wh - 2 * c->bw, False); + x = c->x + WIDTH(c); + } + n -= nm; + } else + mw = 0; + if(n == 0) + return; + /* tile stack */ + x = m->wx + mw; + y = m->wy; + w = m->ww - mw; + h = m->wh / n; + if(h < bh) + h = m->wh; + for(i = 0; c; c = nexttiled(c->next), i++) { + resize(c, x, y, w - 2 * c->bw, + ((i + 1 == n) ? m->wy + m->wh - y : h) - 2 * c->bw, False); + if(h != m->wh) + y = c->y + HEIGHT(c); + } +} + +static void +nbstack(Monitor *m) { + int x, y, h, w, mh, nm; + unsigned int i, n; + Client *c; + + initnmaster(); + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + c = nexttiled(m->clients); + nm = m->num < MaxMon ? nmasters[m->num] : nmaster; + if(nm > n) + nm = n; + /* master */ + if(nm > 0) { + mh = m->mfact * m->wh; + w = m->ww / nm; + if(w < bh) + w = m->ww; + x = m->wx; + for(i = 0; i < nm; i++, c = nexttiled(c->next)) { + resize(c, x, m->wy, ((i + 1 == nm) ? m->wx + m->ww - x : w) - 2 * c->bw, + (n == nm ? m->wh : mh) - 2 * c->bw, False); + if(w != m->ww) + x = c->x + WIDTH(c); + } + n -= nm; + } else + mh = 0; + if(n == 0) + return; + /* tile stack */ + x = m->wx; + y = m->wy + mh; + w = m->ww / n; + h = m->wh - mh; + if(w < bh) + w = m->ww; + for(i = 0; c; c = nexttiled(c->next), i++) { + resize(c, x, y, ((i + 1 == n) ? m->wx + m->ww - x : w) - 2 * c->bw, + h - 2 * c->bw, False); + if(w != m->ww) + x = c->x + WIDTH(c); + } +} diff --git a/dwm.suckless.org/patches/nmaster.md b/dwm.suckless.org/patches/nmaster.md @@ -54,6 +54,7 @@ This feature was dropped from vanilla dwm in version 4.4. ## Download +* [nmaster-ncol.c](nmaster-ncol.c) (dwm 5.9) (20101210) - additional ncol layout (multiple masters side by side) * [nmaster-sym.c](nmaster-sym.c) (dwm 5.7.1) (20090927) - layout symbol shows the number of masters: `n]=`, `TnT` * [nmaster.c](nmaster.c) (dwm 5.6.1) (20090908) * see older versions in [historical patches](historical)