t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit c56533615f84df801f10dedc4d6ff267e0e8df0a
   DIR parent a8e0772c4d977fafb35c5ab9e29e322a9505b71a
   URI Author: Anselm R Garbe <garbeam@gmail.com>
       Date:   Wed, 11 Jun 2008 09:34:00 +0100
       
       integrated Peter Hartlich's patch, removed const char *c from union, simplified togglelayout
       Diffstat:
         M config.def.h                        |       8 ++++----
         M dwm.c                               |      27 +++++----------------------
       
       2 files changed, 9 insertions(+), 26 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       t@@ -10,8 +10,8 @@
        #define SELFGCOLOR      "#ffffff"
        static uint borderpx  = 1;        /* border pixel of windows */
        static uint snap      = 32;       /* snap pixel */
       -static Bool showbar           = True;     /* False means no bar */
       -static Bool topbar            = True;     /* False means bottom bar */
       +static Bool showbar   = True;     /* False means no bar */
       +static Bool topbar    = True;     /* False means bottom bar */
        
        /* tagging */
        static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
       t@@ -42,8 +42,8 @@ static Layout layouts[] = {
        
        static Key keys[] = {
                /* modifier                     key        function        argument */
       -        { MODKEY,                       XK_p,      spawn,          {.c = "exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }},
       -        { MODKEY|ShiftMask,             XK_Return, spawn,          {.c = "exec uxterm" }},
       +        { MODKEY,                       XK_p,      spawn,          {.v = (char *[]){"dmenu_run", "-fn", FONT, "-nb", NORMBGCOLOR, "-nf", NORMFGCOLOR, "-sb", SELBGCOLOR, "-sf", SELFGCOLOR, NULL}} },
       +        { MODKEY|ShiftMask,             XK_Return, spawn,          {.v = (char *[]){"uxterm", NULL}} },
                { MODKEY,                       XK_b,      togglebar,      {0}},
                { MODKEY,                       XK_j,      focusstack,     {.i = +1  }},
                { MODKEY,                       XK_k,      focusstack,     {.i = -1  }},
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -93,11 +93,10 @@ typedef struct {
        } DC; /* draw context */
        
        typedef union {
       -        const char *c;
                int i;
                uint ui;
                float f;
       -        void *aux;
       +        void *v;
        } Arg;
        
        typedef struct {
       t@@ -1388,10 +1387,6 @@ setup(void) {
        
        void
        spawn(const Arg *arg) {
       -        static char *shell = NULL;
       -
       -        if(!shell && !(shell = getenv("SHELL")))
       -                shell = "/bin/sh";
                /* The double-fork construct avoids zombie processes and keeps the code
                 * clean from stupid signal handlers. */
                if(fork() == 0) {
       t@@ -1399,8 +1394,8 @@ spawn(const Arg *arg) {
                                if(dpy)
                                        close(ConnectionNumber(dpy));
                                setsid();
       -                        execl(shell, shell, "-c", arg->c, (char *)NULL);
       -                        fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->c);
       +                        execvp(((char **)arg->v)[0], (char **)arg->v);
       +                        fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
                                perror(" failed");
                        }
                        exit(0);
       t@@ -1481,20 +1476,8 @@ togglefloating(const Arg *arg) {
        
        void
        togglelayout(const Arg *arg) {
       -        uint i;
       -
       -        if(!arg->c) {
       -                if(++lt == &layouts[LENGTH(layouts)])
       -                        lt = &layouts[0];
       -        }
       -        else {
       -                for(i = 0; i < LENGTH(layouts); i++)
       -                        if(!strcmp(arg->c, layouts[i].symbol))
       -                                break;
       -                if(i == LENGTH(layouts))
       -                        return;
       -                lt = &layouts[i];
       -        }
       +        if(++lt == &layouts[LENGTH(layouts)])
       +                lt = &layouts[0];
                if(sel)
                        arrange();
                else