diff -r c3c57faef013 client.c --- a/client.c Fri Jan 19 15:05:07 2007 +0100 +++ b/client.c Fri Jan 19 15:27:32 2007 +0100 @@ -157,11 +157,27 @@ manage(Window w, XWindowAttributes *wa) settags(c, getclient(trans)); if(!c->isfloat) c->isfloat = trans || c->isfixed; - if(clients) - clients->prev = c; - c->next = clients; + + if(apwl) { + Client *tc; + + for(tc = clients; tc && tc->next; tc = tc->next); + if(tc) { + tc->next = c; + c->prev = tc; + } + else + clients = c; + } + else { + if(clients) + clients->prev = c; + c->next = clients; + clients = c; + } c->snext = stack; - stack = clients = c; + stack = c; + XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); XMapWindow(dpy, c->win); if(isvisible(c)) diff -r c3c57faef013 config.default.h --- a/config.default.h Fri Jan 19 15:05:07 2007 +0100 +++ b/config.default.h Fri Jan 19 15:37:11 2007 +0100 @@ -8,7 +8,8 @@ const char *tags[] = { "1", "2", "3", "4 #define BORDERPX 1 #define DEFMODE dotile /* dofloat */ #define FLOATSYMBOL "><>" -#define TILESYMBOL "[]=" +#define TILESYMBOL "[<=" +#define APPENDSYMBOL "[>=" #define FONT "-*-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*" #define NORMBORDERCOLOR "#dddddd" @@ -30,6 +31,7 @@ static Key key[] = { \ { MODKEY, XK_Tab, focusnext, { 0 } }, \ { MODKEY|ShiftMask, XK_Tab, focusprev, { 0 } }, \ { MODKEY, XK_Return, zoom, { 0 } }, \ + { MODKEY, XK_a, toggleappend, { .i = 1 } }, \ { MODKEY, XK_g, resizemaster, { .i = 15 } }, \ { MODKEY, XK_s, resizemaster, { .i = -15 } }, \ { MODKEY, XK_i, incnmaster, { .i = 1 } }, \ diff -r c3c57faef013 draw.c --- a/draw.c Fri Jan 19 15:05:07 2007 +0100 +++ b/draw.c Fri Jan 19 15:29:24 2007 +0100 @@ -111,7 +111,7 @@ drawstatus(void) { dc.x += dc.w; } dc.w = bmw; - drawtext(arrange == dofloat ? FLOATSYMBOL : TILESYMBOL, dc.norm, False, False); + drawtext(arrange == dofloat ? FLOATSYMBOL : apwl ? APPENDSYMBOL : TILESYMBOL, dc.norm, False, False); x = dc.x + dc.w; dc.w = textw(stext); dc.x = sw - dc.w; diff -r c3c57faef013 dwm.h --- a/dwm.h Fri Jan 19 15:05:07 2007 +0100 +++ b/dwm.h Fri Jan 19 15:27:32 2007 +0100 @@ -91,6 +91,7 @@ extern char stext[256]; /* status tex extern char stext[256]; /* status text */ extern int bh, bmw; /* bar height, bar mode label width */ extern int screen, sx, sy, sw, sh; /* screen geometry */ +extern int apwl; /* append window list boolean */ extern int wax, way, wah, waw; /* windowarea geometry */ extern unsigned int master, nmaster; /* master percent, number of master clients */ extern unsigned int ntags, numlockmask; /* number of tags, dynamic lock mask */ @@ -159,3 +160,4 @@ extern void toggleview(Arg *arg); /* to extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */ extern void view(Arg *arg); /* views the tag with arg's index */ extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */ +extern void toggleappend(Arg *arg); /* append new windows to the client's list or not */ diff -r c3c57faef013 main.c --- a/main.c Fri Jan 19 15:05:07 2007 +0100 +++ b/main.c Fri Jan 19 15:27:32 2007 +0100 @@ -19,7 +19,7 @@ char stext[256]; Bool *seltag; -int bh, bmw, screen, sx, sy, sw, sh, wax, way, waw, wah; +int bh, bmw, screen, sx, sy, sw, sh, wax, way, waw, wah, apwl; unsigned int master, nmaster, ntags, numlockmask; Atom wmatom[WMLast], netatom[NetLast]; Bool running = True; @@ -248,6 +248,7 @@ main(int argc, char *argv[]) { screen = DefaultScreen(dpy); root = RootWindow(dpy, screen); otherwm = False; + apwl = False; XSetErrorHandler(xerrorstart); /* this causes an error if some other window manager is running */ XSelectInput(dpy, root, SubstructureRedirectMask); diff -r c3c57faef013 view.c --- a/view.c Fri Jan 19 15:05:07 2007 +0100 +++ b/view.c Fri Jan 19 15:31:17 2007 +0100 @@ -267,3 +267,9 @@ zoom(Arg *arg) { focus(c); arrange(); } + +void +toggleappend(Arg *arg) { + apwl ^= arg->i; + drawstatus(); +}