JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
using execl now, argv changed, using cmd and const char defs directly in the KEYS...
authorarg@10ksloc.org <unknown>
Fri, 4 Aug 2006 10:00:55 +0000 (12:00 +0200)
committerarg@10ksloc.org <unknown>
Fri, 4 Aug 2006 10:00:55 +0000 (12:00 +0200)
config.arg.h
config.default.h
dwm.h
util.c

index 0c39d3b..05b350f 100644 (file)
@@ -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 \
index 14f33ec..cefb7f7 100644 (file)
@@ -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
index 25971ac..939b546 100644 (file)
--- 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
index e29d8b0..990ad28 100644 (file)
--- 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);