From 9955ddc978c2e6acfe246f29f1d317b55d860757 Mon Sep 17 00:00:00 2001 From: "arg@10ksloc.org" Date: Fri, 4 Aug 2006 12:00:55 +0200 Subject: [PATCH] using execl now, argv changed, using cmd and const char defs directly in the KEYS struct --- config.arg.h | 17 ++++++----------- config.default.h | 6 ++++-- dwm.h | 2 +- util.c | 11 +++++++---- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/config.arg.h b/config.arg.h index 0c39d3b..05b350f 100644 --- 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 index 14f33ec..cefb7f7 100644 --- 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 index 25971ac..939b546 100644 --- 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 --- 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);