dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 9955ddc978c2e6acfe246f29f1d317b55d860757
parent 0dfe729f90069de070495c82ddc72cc476a4f3ab
Author: arg@10ksloc.org <unknown>
Date:   Fri,  4 Aug 2006 12:00:55 +0200

using execl now, argv changed, using cmd and const char defs directly in the KEYS struct

Diffstat:
Mconfig.arg.h | 17++++++-----------
Mconfig.default.h | 6++++--
Mdwm.h | 2+-
Mutil.c | 11+++++++----
4 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/config.arg.h b/config.arg.h
@@ -17,13 +17,6 @@ const char *tags[] = { "fnord", "dev", "net", "work", "misc", NULL };
 #define MASTERW            60 /* percent */
 
 #define KEYS \
-    const char *browse[] = { "firefox", NULL }; \
-    const char *gimp[] = { "gimp", NULL }; \
-    const char *term[] = { \
-        "urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white", \
-        "-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL \
-    }; \
-    const char *xlock[] = { "xlock", NULL }; \
 static Key key[] = { \
     /* modifier        key        function    arguments */ \
     { MODKEY,        XK_0,        view,        { .i = 0 } }, \
@@ -50,10 +43,12 @@ static Key key[] = { \
     { MODKEY|ShiftMask,    XK_4,        replacetag,    { .i = 5 } }, \
     { MODKEY|ShiftMask,    XK_c,        killclient,    { 0 } }, \
     { MODKEY|ShiftMask,    XK_q,        quit,        { 0 } }, \
-    { MODKEY|ShiftMask,    XK_Return,    spawn,        { .argv = term } }, \
-    { MODKEY|ShiftMask,    XK_g,        spawn,        { .argv = gimp } }, \
-    { MODKEY|ShiftMask,    XK_l,        spawn,        { .argv = xlock } }, \
-    { MODKEY|ShiftMask,    XK_w,        spawn,        { .argv = browse } }, \
+    { MODKEY|ShiftMask,    XK_x,        spawn, \
+        { .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null |" \
+        " awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
+    { MODKEY|ShiftMask,    XK_Return,    spawn, \
+        { .cmd = "exec urxvt -tr +sb -bg black -fg white -cr white " \
+            "-fn '-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*'" } }, \
 };
 
 #define RULES \
diff --git a/config.default.h b/config.default.h
@@ -17,7 +17,6 @@ const char *tags[] = { "0", "1", "2", "3", "4", NULL };
 #define MASTERW            60 /* percent */
 
 #define KEYS \
-    const char *term[] = { "xterm", NULL }; \
 static Key key[] = { \
     /* modifier        key        function    arguments */ \
     { MODKEY,        XK_0,        view,        { .i = 0 } }, \
@@ -44,7 +43,10 @@ static Key key[] = { \
     { MODKEY|ShiftMask,    XK_4,        replacetag,    { .i = 4 } }, \
     { MODKEY|ShiftMask,    XK_c,        killclient,    { 0 } }, \
     { MODKEY|ShiftMask,    XK_q,        quit,        { 0 } }, \
-    { MODKEY|ShiftMask,    XK_Return,    spawn,        { .argv = term } }, \
+    /* { MODKEY|ShiftMask,    XK_x,        spawn, */ \
+    /*    { .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null |" */ \
+    /*    " awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, */ \
+    { MODKEY|ShiftMask,    XK_Return,    spawn,        { .cmd = "exec xterm" } }, \
 };
 
 #define RULES \
diff --git a/dwm.h b/dwm.h
@@ -17,7 +17,7 @@ typedef struct DC DC;
 typedef struct Fnt Fnt;
 
 union Arg {
-    const char **argv;
+    const char *cmd;
     int i;
 };
 
diff --git a/util.c b/util.c
@@ -43,17 +43,20 @@ eprint(const char *errstr, ...)
 void
 spawn(Arg *arg)
 {
-    char **argv = (char **)arg->argv;
+    static char *shell = NULL;
 
-    if(!argv || !argv[0])
+    if(!shell && !(shell = getenv("SHELL")))
+        shell = "/bin/sh";
+
+    if(!arg->cmd)
         return;
     if(fork() == 0) {
         if(fork() == 0) {
             if(dpy)
                 close(ConnectionNumber(dpy));
             setsid();
-            execvp(argv[0], argv);
-            fprintf(stderr, "dwm: execvp %s", argv[0]);
+            execl(shell, shell, "-c", arg->cmd, NULL);
+            fprintf(stderr, "dwm: execl '%s'", arg->cmd);
             perror(" failed");
         }
         exit(0);