using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
authorarg@10ksloc.org
Fri, 04 Aug 2006 12:00:55 +0200
changeset 189 523df4a3c1c4
parent 188 6d580a6e5c36
child 190 713dcc7d2c42
using execl now, argv changed, using cmd and const char defs directly in the KEYS struct
config.arg.h
config.default.h
dwm.h
util.c
--- 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 \
--- 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 \
--- 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;
 };
 
--- 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);