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:
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);