diff -Nwur dvtm.orig/config.h dvtm.wip/config.h --- dvtm.orig/config.h 2008-02-26 19:19:53.653584435 +0100 +++ dvtm.wip/config.h 2008-02-26 20:38:21.831827186 +0100 @@ -42,12 +42,14 @@ #include "tile.c" #include "grid.c" +#include "tstack.c" #include "bstack.c" #include "fullscreen.c" Layout layouts[] = { { "[]=", tile }, { "+++", grid }, + { "LLL", tstack }, { "TTT", bstack }, { "[ ]", fullscreen }, }; @@ -64,6 +66,7 @@ { MOD, 'k', { focusprev, { NULL } } }, { MOD, 't', { setlayout, { "[]=" } } }, { MOD, 'g', { setlayout, { "+++" } } }, + { MOD, 'B', { setlayout, { "LLL" } } }, { MOD, 'b', { setlayout, { "TTT" } } }, { MOD, 'm', { setlayout, { "[ ]" } } }, { MOD, ' ', { setlayout, { NULL } } }, diff -Nwur dvtm.orig/dvtm.c dvtm.wip/dvtm.c --- dvtm.orig/dvtm.c 2008-02-26 19:19:53.685586435 +0100 +++ dvtm.wip/dvtm.c 2008-02-26 19:25:49.271809187 +0100 @@ -403,7 +403,7 @@ setmwfact(const char *args[]) { double delta; - if(!isarrange(tile) && !isarrange(bstack)) + if( ! (isarrange(tile) || isarrange(tstack) || isarrange(bstack)) ) return; /* arg handling, manipulate mwfact */ if(args[0] == NULL) Binary files dvtm.orig/.git/index and dvtm.wip/.git/index differ diff -Nwur dvtm.orig/Makefile dvtm.wip/Makefile --- dvtm.orig/Makefile 2008-02-26 19:19:53.649584185 +0100 +++ dvtm.wip/Makefile 2008-02-26 20:37:52.794012436 +0100 @@ -35,7 +35,7 @@ @echo creating dist tarball @mkdir -p dvtm-${VERSION} @cp -R LICENSE Makefile README config.h config.mk \ - ${SRC} tile.c bstack.c grid.c fullscreen.c \ + ${SRC} tile.c tstack.c bstack.c grid.c fullscreen.c \ madtty.h dvtm-status dvtm.1 dvtm-${VERSION} @tar -cf dvtm-${VERSION}.tar dvtm-${VERSION} @gzip dvtm-${VERSION}.tar diff -Nwur dvtm.orig/tstack.c dvtm.wip/tstack.c --- dvtm.orig/tstack.c 1970-01-01 01:00:00.000000000 +0100 +++ dvtm.wip/tstack.c 2008-02-26 19:18:12.171242185 +0100 @@ -0,0 +1,53 @@ +void +tstack(void) { + unsigned int i, m, n, nx, ny, nw, nh, mh, tw; + Client *c; + + for(n = 0, m = 0, c = clients; c; c = c->next, n++) + if(c->minimized) + m++; + + /* relative height */ + mh = (wah - m) * (n == 1 || n - 1 == m ? 1 : mwfact); + + /* true if there are at least 2 non minimized clients */ + if(n - 1 > m) + tw = waw / (n - m - 1); + + nx = wax, nw = waw; + for(i = 0, c = clients; c; c = c->next, i++){ + if(i == 0){ /* master */ + ny = wah - mh; + nh = mh; + } else { /* tile window */ + if(i == 1){ + nx = wax; + ny = way + m; + nh = wah - mh - ny; + } + if(i == n - m - 1){ /* last not minimized client */ + nw = (wax + waw) - nx; + } else if(i == n - m){ /* first minimized client */ + nx = wax; + ny--; + nh = 1; + nw = waw; + } else if(c->minimized) { /* minimized window */ + ny--; + nh = 1; + nw = waw; + } else /* normal non minimized tile window */ + nw = tw; + if(i > 1 && !c->minimized){ + mvvline(ny, nx, ACS_VLINE, nh); + mvaddch(ny, nx, ACS_TTEE); + nx++, nw--; + } + } + + resize(c,nx,ny,nw,nh); + + if(n > 1 && i < n - m - 1) + nx += nw; + } +}