diff -r ac233c362502 config.h --- a/config.h Sat Sep 22 21:55:19 2007 +0200 +++ b/config.h Sun Sep 23 01:38:33 2007 +0200 @@ -52,6 +52,7 @@ Key keys[] = { \ { MODKEY, XK_Return, zoom, NULL }, \ { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \ { MODKEY|ShiftMask, XK_c, killclient, NULL }, \ + { MODKEY, XK_Escape, viewprevtag, NULL }, \ { MODKEY, XK_0, view, NULL }, \ { MODKEY, XK_1, view, tags[0] }, \ { MODKEY, XK_2, view, tags[1] }, \ diff -r ac233c362502 dwm.c --- a/dwm.c Sat Sep 22 21:55:19 2007 +0200 +++ b/dwm.c Sun Sep 23 01:38:33 2007 +0200 @@ -184,6 +184,7 @@ void updatesizehints(Client *c); void updatesizehints(Client *c); void updatetitle(Client *c); void view(const char *arg); +void viewprevtag(const char *arg); int xerror(Display *dpy, XErrorEvent *ee); int xerrordummy(Display *dsply, XErrorEvent *ee); int xerrorstart(Display *dsply, XErrorEvent *ee); @@ -216,6 +217,7 @@ void (*handler[LASTEvent]) (XEvent *) = }; Atom wmatom[WMLast], netatom[NetLast]; Bool otherwm, readin; +Bool *prevtags; Bool running = True; Bool *seltags; Bool selscreen = True; @@ -393,6 +395,7 @@ cleanup(void) { XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); XSync(dpy, False); free(seltags); + free(prevtags); } void @@ -1468,7 +1471,9 @@ setup(void) { compileregs(); for(ntags = 0; tags[ntags]; ntags++); seltags = emallocz(sizeof(Bool) * ntags); + prevtags = emallocz(sizeof(Bool) * ntags); seltags[0] = True; + prevtags[0] = True; /* init appearance */ dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR); @@ -1838,12 +1843,28 @@ view(const char *arg) { view(const char *arg) { unsigned int i; - for(i = 0; i < ntags; i++) + if (!arg) + return; + for(i = 0; i < ntags; i++) { + prevtags[i] = seltags[i]; seltags[i] = arg == NULL; + } i = idxoftag(arg); if(i >= 0 && i < ntags) seltags[i] = True; arrange(); +} + +void +viewprevtag(const char *arg) { + unsigned int i; + Bool t; + + for(i = 0; i < ntags; i++) { + t = seltags[i]; + seltags[i] = prevtags[i]; + prevtags[i] = t; + } } void