sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 56cfc17edb169e7ad83bcc16479f0335e59d5049
parent bca12b5ad2850cc50267170d9729c37a3f05e251
Author: Aaron Duxler <aaron.duxler@gmail.com>
Date:   Sun, 12 May 2019 19:01:23 +0200

Added ru_gaps to dwm

Diffstat:
Adwm.suckless.org/patches/ru_gaps/dwm-ru_bottomstack-6.2.diff | 100+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/ru_gaps/dwm-ru_centeredmaster-6.2.diff | 141+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/ru_gaps/dwm-ru_fibonacci-6.2.diff | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/ru_gaps/dwm-ru_gapelessgrid-6.2.diff | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/ru_gaps/dwm-ru_gaps-6.2.diff | 112+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/ru_gaps/index.md | 30++++++++++++++++++++++++++++++
6 files changed, 525 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/ru_gaps/dwm-ru_bottomstack-6.2.diff b/dwm.suckless.org/patches/ru_gaps/dwm-ru_bottomstack-6.2.diff @@ -0,0 +1,100 @@ +diff -up a/config.def.h b/config.def.h +--- a/config.def.h 2019-05-12 18:04:54.266577663 +0200 ++++ b/config.def.h 2019-05-12 18:09:10.956572781 +0200 +@@ -39,6 +39,8 @@ static const int resizehints = 1; /* + + static const Layout layouts[] = { + /* symbol arrange function */ ++ { "TTT", bstack }, ++ { "===", bstackhoriz }, + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, +diff -up a/dwm.c b/dwm.c +--- a/dwm.c 2019-05-12 13:27:12.179914831 +0200 ++++ b/dwm.c 2019-05-12 14:12:02.643197077 +0200 +@@ -235,6 +235,8 @@ static int xerror(Display *dpy, XErrorEv + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); ++static void bstack(Monitor *m); ++static void bstackhoriz(Monitor *m); + + /* variables */ + static const char broken[] = "broken"; +@@ -2172,3 +2174,75 @@ main(int argc, char *argv[]) + XCloseDisplay(dpy); + return EXIT_SUCCESS; + } ++ ++static void ++bstack(Monitor *m) { ++ int w, h, mh, mx, tx, ty, tw; ++ unsigned int i, n; ++ Client *c; ++ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (n == 0) ++ return; ++ if(n == 1){ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); ++ return; ++ } ++ if (n > m->nmaster) { ++ mh = m->nmaster ? m->mfact * m->wh : 0; ++ tw = m->ww / (n - m->nmaster); ++ ty = m->wy + mh; ++ } else { ++ mh = m->wh; ++ tw = m->ww; ++ ty = m->wy; ++ } ++ for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ if (i < m->nmaster) { ++ w = (m->ww - mx) / (MIN(n, m->nmaster) - i); ++ resize(c, m->wx + mx + m->gappx, m->wy + m->gappx, w - 2 * (c->bw + m->gappx), mh - 2 *(c->bw + m->gappx), 0); ++ mx += WIDTH(c) + m->gappx; ++ } else { ++ h = m->wh - mh; ++ resize(c, tx + m->gappx, ty + m->gappx, tw - 2 * (c->bw + m->gappx), h - 2 * (c->bw + m->gappx), 0); ++ if (tw != m->ww) ++ tx += WIDTH(c) + m->gappx; ++ } ++ } ++} ++ ++static void ++bstackhoriz(Monitor *m) { ++ int w, mh, mx, tx, ty, th; ++ unsigned int i, n; ++ Client *c; ++ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (n == 0) ++ return; ++ if(n == 1){ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); ++ return; ++ } ++ if (n > m->nmaster) { ++ mh = m->nmaster ? m->mfact * m->wh : 0; ++ th = (m->wh - mh) / (n - m->nmaster); ++ ty = m->wy + mh; ++ } else { ++ th = mh = m->wh; ++ ty = m->wy; ++ } ++ for (i = mx = 0, tx = m->wx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { ++ if (i < m->nmaster) { ++ w = (m->ww - mx) / (MIN(n, m->nmaster) - i); ++ resize(c, m->wx + mx + m->gappx, m->wy + m->gappx, w - 2 * (c->bw + m->gappx), mh - 2 * (c->bw + m->gappx), 0); ++ mx += WIDTH(c) + m->gappx; ++ } else { ++ resize(c, tx + m->gappx, ty + m->gappx, m->ww - 2 * (c->bw + m->gappx), th - 2 * (c->bw + m->gappx), 0); ++ if (th != m->wh) ++ ty += HEIGHT(c) + m->gappx; ++ } ++ } ++} diff --git a/dwm.suckless.org/patches/ru_gaps/dwm-ru_centeredmaster-6.2.diff b/dwm.suckless.org/patches/ru_gaps/dwm-ru_centeredmaster-6.2.diff @@ -0,0 +1,141 @@ +diff -up a/config.def.h b/config.def.h +--- a/config.def.h 2019-05-12 17:29:44.703284415 +0200 ++++ b/config.def.h 2019-05-12 17:40:35.226605379 +0200 +@@ -39,6 +39,8 @@ static const int resizehints = 1; /* + + static const Layout layouts[] = { + /* symbol arrange function */ ++ { "|M|", centeredmaster }, ++ { ">M>", centeredfloatingmaster }, + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, +diff -up a/dwm.c b/dwm.c +--- a/dwm.c 2019-05-12 13:27:12.179914831 +0200 ++++ b/dwm.c 2019-05-12 14:52:16.943332307 +0200 +@@ -235,6 +235,8 @@ static int xerror(Display *dpy, XErrorEv + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); ++static void centeredmaster(Monitor *m); ++static void centeredfloatingmaster(Monitor *m); + + /* variables */ + static const char broken[] = "broken"; +@@ -2172,3 +2174,116 @@ main(int argc, char *argv[]) + XCloseDisplay(dpy); + return EXIT_SUCCESS; + } ++ ++void ++centeredmaster(Monitor *m) ++{ ++ unsigned int i, n, h, mw, mx, my, oty, ety, tw; ++ Client *c; ++ ++ /* count number of clients in the selected monitor */ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (n == 0) ++ return; ++ if(n == 1){ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); ++ return; ++ } ++ ++ /* initialize areas */ ++ mw = m->ww; ++ mx = 0; ++ my = 0; ++ tw = mw; ++ ++ if (n > m->nmaster) { ++ /* go mfact box in the center if more than nmaster clients */ ++ mw = m->nmaster ? m->ww * m->mfact : 0; ++ tw = m->ww - mw; ++ ++ if (n - m->nmaster > 1) { ++ /* only one client */ ++ mx = (m->ww - mw) / 2; ++ tw = (m->ww - mw) / 2; ++ } ++ } ++ ++ oty = 0; ++ ety = 0; ++ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ /* nmaster clients are stacked vertically, in the center ++ * of the screen */ ++ h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx; ++ resize(c, m->wx + mx + m->gappx, m->wy + my + m->gappx, mw - 2*(c->bw + m->gappx), ++ h - (2*c->bw) - m->gappx, 0); ++ my += HEIGHT(c) + m->gappx; ++ } else { ++ /* stack clients are stacked vertically */ ++ if ((i - m->nmaster) % 2 ) { ++ h = (m->wh - ety) / ( (1 + n - i) / 2) - m->gappx; ++ resize(c, m->wx + m->gappx, m->wy + ety + m->gappx, tw - 2*(c->bw + m->gappx), ++ h - (2*c->bw) - m->gappx, 0); ++ ety += HEIGHT(c) + m->gappx; ++ } else { ++ h = (m->wh - oty) / ((1 + n - i) / 2) - m->gappx; ++ resize(c, m->wx + mx + mw + m->gappx, m->wy + oty + m->gappx, ++ tw - 2*(c->bw + m->gappx), h - (2*c->bw) - m->gappx, 0); ++ oty += HEIGHT(c) + m->gappx; ++ } ++ } ++} ++ ++void ++centeredfloatingmaster(Monitor *m) ++{ ++ unsigned int i, n, w, mh, mw, mx, mxo, my, myo, tx; ++ Client *c; ++ ++ /* count number of clients in the selected monitor */ ++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); ++ if (n == 0) ++ return; ++ if(n == 1){ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); ++ return; ++ } ++ ++ /* initialize nmaster area */ ++ if (n > m->nmaster) { ++ /* go mfact box in the center if more than nmaster clients */ ++ if (m->ww > m->wh) { ++ mw = m->nmaster ? m->ww * m->mfact : 0; ++ mh = m->nmaster ? m->wh * 0.9 : 0; ++ } else { ++ mh = m->nmaster ? m->wh * m->mfact : 0; ++ mw = m->nmaster ? m->ww * 0.9 : 0; ++ } ++ mx = mxo = (m->ww - mw) / 2; ++ my = myo = (m->wh - mh) / 2; ++ } else { ++ /* go fullscreen if all clients are in the master area */ ++ mh = m->wh; ++ mw = m->ww; ++ mx = mxo = 0; ++ my = myo = 0; ++ } ++ ++ for(i = tx = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ if (i < m->nmaster) { ++ /* nmaster clients are stacked horizontally, in the center ++ * of the screen */ ++ w = (mw + mxo - mx) / (MIN(n, m->nmaster) - i); ++ resize(c, m->wx + mx + m->gappx, m->wy + my + m->gappx, w - 2*(c->bw + m->gappx), ++ mh - 2*(c->bw + m->gappx), 0); ++ mx += WIDTH(c) + m->gappx; ++ } else { ++ /* stack clients are stacked horizontally */ ++ w = (m->ww - tx) / (n - i); ++ resize(c, m->wx + tx + m->gappx, m->wy + m->gappx, w - 2*(c->bw + m->gappx), ++ m->wh - 2*(c->bw + m->gappx), 0); ++ tx += WIDTH(c) + m->gappx; ++ } ++} diff --git a/dwm.suckless.org/patches/ru_gaps/dwm-ru_fibonacci-6.2.diff b/dwm.suckless.org/patches/ru_gaps/dwm-ru_fibonacci-6.2.diff @@ -0,0 +1,87 @@ +diff -up a/config.def.h b/config.def.h +--- a/config.def.h 2019-05-12 17:29:44.703284415 +0200 ++++ b/config.def.h 2019-05-12 17:33:54.796612993 +0200 +@@ -39,6 +39,8 @@ static const int resizehints = 1; /* + + static const Layout layouts[] = { + /* symbol arrange function */ ++ { "[@]", spiral }, ++ { "[\\]", dwindle }, + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, +diff -upN a/fibonacci.c b/fibonacci.c +--- a/fibonacci.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/fibonacci.c 2019-05-12 14:26:22.213180754 +0200 +@@ -0,0 +1,71 @@ ++void ++fibonacci(Monitor *mon, int s) { ++ unsigned int i, n, nx, ny, nw, nh; ++ Client *c; ++ ++ for(n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++); ++ if(n == 0) ++ return; ++ if(n == 1){ ++ c = nexttiled(mon->clients); ++ resize(c, mon->wx, mon->wy, mon->ww - 2 * c->bw, mon->wh - 2 * c->bw, 0); ++ return; ++ } ++ ++ nx = mon->wx; ++ ny = 0; ++ nw = mon->ww; ++ nh = mon->wh; ++ ++ for(i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) { ++ if((i % 2 && nh / 2 > 2 * c->bw) ++ || (!(i % 2) && nw / 2 > 2 * c->bw)) { ++ if(i < n - 1) { ++ if(i % 2) ++ nh /= 2; ++ else ++ nw /= 2; ++ if((i % 4) == 2 && !s) ++ nx += nw; ++ else if((i % 4) == 3 && !s) ++ ny += nh; ++ } ++ if((i % 4) == 0) { ++ if(s) ++ ny += nh; ++ else ++ ny -= nh; ++ } ++ else if((i % 4) == 1) ++ nx += nw; ++ else if((i % 4) == 2) ++ ny += nh; ++ else if((i % 4) == 3) { ++ if(s) ++ nx += nw; ++ else ++ nx -= nw; ++ } ++ if(i == 0) ++ { ++ if(n != 1) ++ nw = mon->ww * mon->mfact; ++ ny = mon->wy; ++ } ++ else if(i == 1) ++ nw = mon->ww - nw; ++ i++; ++ } ++ resize(c, nx + mon->gappx, ny + mon->gappx, nw - 2 * (c->bw + mon->gappx), nh - 2 * (c->bw + mon->gappx), False); ++ } ++} ++ ++void ++dwindle(Monitor *mon) { ++ fibonacci(mon, 1); ++} ++ ++void ++spiral(Monitor *mon) { ++ fibonacci(mon, 0); ++} diff --git a/dwm.suckless.org/patches/ru_gaps/dwm-ru_gapelessgrid-6.2.diff b/dwm.suckless.org/patches/ru_gaps/dwm-ru_gapelessgrid-6.2.diff @@ -0,0 +1,55 @@ +diff -up a/config.def.h b/config.def.h +--- a/config.def.h 2019-05-12 17:49:58.316594678 +0200 ++++ b/config.def.h 2019-05-12 18:00:07.816583101 +0200 +@@ -39,6 +39,7 @@ static const int resizehints = 1; /* + + static const Layout layouts[] = { + /* symbol arrange function */ ++ { "###", gaplessgrid }, + { "[]=", tile }, /* first entry is default */ + { "><>", NULL }, /* no layout function means floating behavior */ + { "[M]", monocle }, +diff -upN a/gaplessgrid.c b/gaplessgrid.c +--- a/gaplessgrid.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/gaplessgrid.c 2019-05-12 13:16:17.589927256 +0200 +@@ -0,0 +1,40 @@ ++void ++gaplessgrid(Monitor *m) { ++ unsigned int n, cols, rows, cn, rn, i, cx, cy, cw, ch; ++ Client *c; ++ ++ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) ; ++ if(n == 0) ++ return; ++ if(n == 1){ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); ++ return; ++ } ++ ++ /* grid dimensions */ ++ for(cols = 0; cols <= n/2; cols++) ++ if(cols*cols >= n) ++ break; ++ if(n == 5) /* set layout against the general calculation: not 1:2:2, but 2:3 */ ++ cols = 2; ++ rows = n/cols; ++ ++ /* window geometries */ ++ cw = cols ? m->ww / cols : m->ww; ++ cn = 0; /* current column number */ ++ rn = 0; /* current row number */ ++ for(i = 0, c = nexttiled(m->clients); c; i++, c = nexttiled(c->next)) { ++ if(i/rows + 1 > cols - n%cols) ++ rows = n/cols + 1; ++ ch = rows ? m->wh / rows : m->wh; ++ cx = m->wx + cn*cw; ++ cy = m->wy + rn*ch; ++ resize(c, cx + m->gappx, cy + m->gappx, cw - 2 * (c->bw + m->gappx), ch - 2 * (c->bw + m->gappx), False); ++ rn++; ++ if(rn >= rows) { ++ rn = 0; ++ cn++; ++ } ++ } ++} diff --git a/dwm.suckless.org/patches/ru_gaps/dwm-ru_gaps-6.2.diff b/dwm.suckless.org/patches/ru_gaps/dwm-ru_gaps-6.2.diff @@ -0,0 +1,112 @@ +diff -up a/config.def.h b/config.def.h +--- a/config.def.h 2019-05-12 13:03:42.203274935 +0200 ++++ b/config.def.h 2019-05-12 12:15:21.033330008 +0200 +@@ -2,6 +2,7 @@ + + /* appearance */ + static const unsigned int borderpx = 1; /* border pixel of windows */ ++static const unsigned int gappx = 5; /* gaps between windows */ + static const unsigned int snap = 32; /* snap pixel */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ +@@ -84,6 +85,9 @@ static Key keys[] = { + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, ++ { MODKEY, XK_minus, setgaps, {.i = -1 } }, ++ { MODKEY, XK_equal, setgaps, {.i = +1 } }, ++ { MODKEY|ShiftMask, XK_equal, setgaps, {.i = 0 } }, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) +diff -up a/dwm.c b/dwm.c +--- a/dwm.c 2019-05-12 13:03:42.206608268 +0200 ++++ b/dwm.c 2019-05-12 13:02:23.463276430 +0200 +@@ -119,6 +119,7 @@ struct Monitor { + int by; /* bar geometry */ + int mx, my, mw, mh; /* screen size */ + int wx, wy, ww, wh; /* window area */ ++ int gappx; /* gaps between windows */ + unsigned int seltags; + unsigned int sellt; + unsigned int tagset[2]; +@@ -199,6 +200,7 @@ static void sendmon(Client *c, Monitor * + static void setclientstate(Client *c, long state); + static void setfocus(Client *c); + static void setfullscreen(Client *c, int fullscreen); ++static void setgaps(const Arg *arg); + static void setlayout(const Arg *arg); + static void setmfact(const Arg *arg); + static void setup(void); +@@ -638,6 +640,7 @@ createmon(void) + m->nmaster = nmaster; + m->showbar = showbar; + m->topbar = topbar; ++ m->gappx = gappx; + m->lt[0] = &layouts[0]; + m->lt[1] = &layouts[1 % LENGTH(layouts)]; + strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); +@@ -1282,6 +1285,13 @@ resizeclient(Client *c, int x, int y, in + c->oldw = c->w; c->w = wc.width = w; + c->oldh = c->h; c->h = wc.height = h; + wc.border_width = c->bw; ++ if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next)) ++ || &monocle == c->mon->lt[c->mon->sellt]->arrange)) ++ { ++ c->w = wc.width += c->bw * 2; ++ c->h = wc.height += c->bw * 2; ++ wc.border_width = 0; ++ } + XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); + configure(c); + XSync(dpy, False); +@@ -1498,6 +1508,16 @@ setfullscreen(Client *c, int fullscreen) + } + + void ++setgaps(const Arg *arg) ++{ ++ if ((arg->i == 0) || (selmon->gappx + arg->i < 0)) ++ selmon->gappx = 0; ++ else ++ selmon->gappx += arg->i; ++ arrange(selmon); ++} ++ ++void + setlayout(const Arg *arg) + { + if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) +@@ -1679,20 +1699,25 @@ tile(Monitor *m) + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + if (n == 0) + return; ++ if(n == 1){ ++ c = nexttiled(m->clients); ++ resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); ++ return; ++ } + + if (n > m->nmaster) + mw = m->nmaster ? m->ww * m->mfact : 0; + else +- mw = m->ww; +- for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) ++ mw = m->ww - m->gappx; ++ for (i = 0, my = ty = m->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + if (i < m->nmaster) { +- h = (m->wh - my) / (MIN(n, m->nmaster) - i); +- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); +- my += HEIGHT(c); ++ h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx; ++ resize(c, m->wx + m->gappx, m->wy + my, mw - (2*c->bw) - m->gappx, h - (2*c->bw), 0); ++ my += HEIGHT(c) + m->gappx; + } else { +- h = (m->wh - ty) / (n - i); +- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); +- ty += HEIGHT(c); ++ h = (m->wh - ty) / (n - i) - m->gappx; ++ resize(c, m->wx + mw + m->gappx, m->wy + ty, m->ww - mw - 2*(c->bw + m->gappx), h - (2*c->bw), 0); ++ ty += HEIGHT(c) + m->gappx; + } + } diff --git a/dwm.suckless.org/patches/ru_gaps/index.md b/dwm.suckless.org/patches/ru_gaps/index.md @@ -0,0 +1,30 @@ +ru\_gaps +======== + +Description +----------- +This patch is basically a copy of[fullgaps](../fullgaps/), +but like [uselessgaps](../uselessgaps/) it removes gaps and borders when in monocle mode. + +Download +-------- +* [dwm-ru\_gaps-6.2.diff](dwm-ru_gaps-6.2.diff) + +Apply the following patches on top of the previous patch to add +additional layouts with resizeable gap support. + +A copy of the [fibonacci](../fibonacci/), but with resizeable gaps. + * [dwm-ru\_fibonacci-6.2.diff](dwm-ru_fibonacci-6.2.diff) + +A copy of the [gaplessgrid](../gaplessgrid/), but with resizeable gaps. + * [dwm-ru\_gaplessgrid-6.2.diff](dwm-ru_gaps-6.2.diff) + +A copy of the [bottomstack](../bottomstack/), but with resizeable gaps. + * [dwm-ru\_bottomstack-6.2.diff](dwm-ru_bottomstack-6.2.diff) + +A copy of the [centeredmaster](../centeredmaster/), but with resizeable gaps. + * [dwm-ru\_centeredmaster-6.2.diff](dwm-ru_centeredmaster-6.2.diff) + +Author +------ +* Aaron Duxler <aaron.duxler@gmail.com>