using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
arg@10ksloc.org unknown
Fri, 04 Aug 2006 12:00:55 +0200
4 files changed,
18 insertions(+),
18 deletions(-)
M
config.arg.h
→
config.arg.h
@@ -17,13 +17,6 @@ #define NUMLOCKMASK Mod2Mask
#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_3, replacetag, { .i = 3 } }, \
{ 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 \
M
config.default.h
→
config.default.h
@@ -17,7 +17,6 @@ #define NUMLOCKMASK Mod2Mask
#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_3, replacetag, { .i = 3 } }, \
{ 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 \
M
util.c
→
util.c
@@ -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);