--- bstack.c Wed Dec 31 19:00:00 1969 +++ bstack.c Sat Sep 22 15:10:39 2007 @@ -0,0 +1,73 @@ +void +bstack(void) { + unsigned int i, n, nx, ny, nw, nh, mh, tw, th; + Client *c; + + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) + n++; + + /* window geoms */ + mh = (n > 1) ? (wah * mwfact) / 1 : wah / (n > 0 ? n : 1); + th = (n > 1) ? (wah * (1 - mwfact)) / 1 : 0; + tw = (n > 1) ? waw / (n - 1) : 0; + + for(i = 0, c = nexttiled(clients); c; c = nexttiled(c->next), i++) { + c->ismax = False; + nx = wax; + ny = way; + if(i < 1) { + ny += i * mh; + nw = waw - 2 * c->border; + nh = mh - 2 * c->border; + } + else { + nx += (i - 1) * tw; + ny += mh * 1; + if(i + 1 == n) { /* remainder */ + nw = (wax + waw) - nx - 2 * c->border; + } + else { + nw = tw - 2 * c->border; + } + nh = th - 2 * c->border + 1; + } + resize(c, nx, ny, nw, nh, RESIZEHINTS); + } +} + +void +setmhfact(const char *arg) { + double delta; + + if(!isarrange(bstack)) + return; + /* arg handling, manipulate mwfact */ + if(arg == NULL) + mwfact = MWFACT; + else if(1 == sscanf(arg, "%lf", &delta)) { + if(arg[0] == '+' || arg[0] == '-') + mwfact += delta; + else + mwfact = delta; + if(mwfact < 0.1) + mwfact = 0.1; + else if(mwfact > 0.9) + mwfact = 0.9; + } + arrange(); +} + +void +bzoom(const char *arg) { + Client *c; + + if(!sel || !isarrange(bstack) || sel->isfloating) + return; + if((c = sel) == nexttiled(clients)) + if(!(c = nexttiled(c->next))) + return; + detach(c); + attach(c); + focus(c); + arrange(); +} --- config.h Sat Sep 22 03:11:13 2007 +++ config.h Sat Sep 22 15:11:09 2007 @@ -21,14 +21,16 @@ Rule rules[] = { { "Acroread", NULL, True }, }; +#define RESIZEHINTS True /* False - respect size hints in tiled resizals */ +#define MWFACT 0.6 /* master width factor [0.1 .. 0.9] */ /* layout(s) */ +#include "bstack.c" Layout layouts[] = { /* symbol function */ { "[]=", tile }, /* first entry is default */ { "><>", floating }, + { "TTT", bstack }, }; -#define RESIZEHINTS True /* False - respect size hints in tiled resizals */ -#define MWFACT 0.6 /* master width factor [0.1 .. 0.9] */ #define SNAP 32 /* snap pixel */ /* key definitions */ @@ -47,8 +49,11 @@ Key keys[] = { \ { MODKEY, XK_k, focusprev, NULL }, \ { MODKEY, XK_h, setmwfact, "-0.05" }, \ { MODKEY, XK_l, setmwfact, "+0.05" }, \ + { MODKEY, XK_h, setmhfact, "-0.05" }, \ + { MODKEY, XK_l, setmhfact, "+0.05" }, \ { MODKEY, XK_m, togglemax, NULL }, \ { MODKEY, XK_Return, zoom, NULL }, \ + { MODKEY, XK_Return, bzoom, NULL }, \ { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \ { MODKEY|ShiftMask, XK_c, killclient, NULL }, \ { MODKEY, XK_0, view, NULL }, \