# HG changeset patch # User arg@10ksloc.org # Date 1154685655 -7200 # Node ID 523df4a3c1c454ad9a9b6597431ebdfe46c06bbc # Parent 6d580a6e5c36993bdf2e4750c39a0285dfc69654 using execl now, argv changed, using cmd and const char defs directly in the KEYS struct diff -r 6d580a6e5c36 -r 523df4a3c1c4 config.arg.h --- a/config.arg.h Fri Aug 04 10:36:22 2006 +0200 +++ b/config.arg.h Fri Aug 04 12:00:55 2006 +0200 @@ -17,13 +17,6 @@ #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 @@ { 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 -r 6d580a6e5c36 -r 523df4a3c1c4 config.default.h --- a/config.default.h Fri Aug 04 10:36:22 2006 +0200 +++ b/config.default.h Fri Aug 04 12:00:55 2006 +0200 @@ -17,7 +17,6 @@ #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 @@ { 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 -r 6d580a6e5c36 -r 523df4a3c1c4 dwm.h --- a/dwm.h Fri Aug 04 10:36:22 2006 +0200 +++ b/dwm.h Fri Aug 04 12:00:55 2006 +0200 @@ -17,7 +17,7 @@ typedef struct Fnt Fnt; union Arg { - const char **argv; + const char *cmd; int i; }; diff -r 6d580a6e5c36 -r 523df4a3c1c4 util.c --- a/util.c Fri Aug 04 10:36:22 2006 +0200 +++ b/util.c Fri Aug 04 12:00:55 2006 +0200 @@ -43,17 +43,20 @@ 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);