about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--config.arg.h17
-rw-r--r--config.default.h6
-rw-r--r--dwm.h2
-rw-r--r--util.c11
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);