dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit c56533615f84df801f10dedc4d6ff267e0e8df0a
parent a8e0772c4d977fafb35c5ab9e29e322a9505b71a
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:
Mconfig.def.h | 8++++----
Mdwm.c | 27+++++----------------------
2 files changed, 9 insertions(+), 26 deletions(-)
diff --git a/config.def.h b/config.def.h
@@ -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" };
@@ -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  }},
diff --git a/dwm.c b/dwm.c
@@ -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 {
@@ -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) {
@@ -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);
@@ -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