using execl now, argv changed, using cmd and const char defs directly in the KEYS struct 9955ddc9
arg@10ksloc.org · 2006-08-04 12:00 4 file(s) · +18 −18
config.arg.h +6 −11
17 17
#define MASTERW			60 /* percent */
18 18
19 19
#define KEYS \
20 -
	const char *browse[] = { "firefox", NULL }; \
21 -
	const char *gimp[] = { "gimp", NULL }; \
22 -
	const char *term[] = { \
23 -
		"urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white", \
24 -
		"-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL \
25 -
	}; \
26 -
	const char *xlock[] = { "xlock", NULL }; \
27 20
static Key key[] = { \
28 21
	/* modifier		key		function	arguments */ \
29 22
	{ MODKEY,		XK_0,		view,		{ .i = 0 } }, \
50 43
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = 5 } }, \
51 44
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
52 45
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
53 -
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
54 -
	{ MODKEY|ShiftMask,	XK_g,		spawn,		{ .argv = gimp } }, \
55 -
	{ MODKEY|ShiftMask,	XK_l,		spawn,		{ .argv = xlock } }, \
56 -
	{ MODKEY|ShiftMask,	XK_w,		spawn,		{ .argv = browse } }, \
46 +
	{ MODKEY|ShiftMask,	XK_x,		spawn, \
47 +
		{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null |" \
48 +
		" awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, \
49 +
	{ MODKEY|ShiftMask,	XK_Return,	spawn, \
50 +
		{ .cmd = "exec urxvt -tr +sb -bg black -fg white -cr white " \
51 +
			"-fn '-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*'" } }, \
57 52
};
58 53
59 54
#define RULES \
config.default.h +4 −2
17 17
#define MASTERW			60 /* percent */
18 18
19 19
#define KEYS \
20 -
	const char *term[] = { "xterm", NULL }; \
21 20
static Key key[] = { \
22 21
	/* modifier		key		function	arguments */ \
23 22
	{ MODKEY,		XK_0,		view,		{ .i = 0 } }, \
44 43
	{ MODKEY|ShiftMask,	XK_4,		replacetag,	{ .i = 4 } }, \
45 44
	{ MODKEY|ShiftMask,	XK_c,		killclient,	{ 0 } }, \
46 45
	{ MODKEY|ShiftMask,	XK_q,		quit,		{ 0 } }, \
47 -
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .argv = term } }, \
46 +
	/* { MODKEY|ShiftMask,	XK_x,		spawn, */ \
47 +
	/*	{ .cmd = "exec `ls -lL /usr/bin /usr/local/bin 2>/dev/null |" */ \
48 +
	/*	" awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort | uniq | dmenu`" } }, */ \
49 +
	{ MODKEY|ShiftMask,	XK_Return,	spawn,		{ .cmd = "exec xterm" } }, \
48 50
};
49 51
50 52
#define RULES \
dwm.h +1 −1
17 17
typedef struct Fnt Fnt;
18 18
19 19
union Arg {
20 -
	const char **argv;
20 +
	const char *cmd;
21 21
	int i;
22 22
};
23 23
util.c +7 −4
43 43
void
44 44
spawn(Arg *arg)
45 45
{
46 -
	char **argv = (char **)arg->argv;
46 +
	static char *shell = NULL;
47 47
48 -
	if(!argv || !argv[0])
48 +
	if(!shell && !(shell = getenv("SHELL")))
49 +
		shell = "/bin/sh";
50 +
51 +
	if(!arg->cmd)
49 52
		return;
50 53
	if(fork() == 0) {
51 54
		if(fork() == 0) {
52 55
			if(dpy)
53 56
				close(ConnectionNumber(dpy));
54 57
			setsid();
55 -
			execvp(argv[0], argv);
56 -
			fprintf(stderr, "dwm: execvp %s", argv[0]);
58 +
			execl(shell, shell, "-c", arg->cmd, NULL);
59 +
			fprintf(stderr, "dwm: execl '%s'", arg->cmd);
57 60
			perror(" failed");
58 61
		}
59 62
		exit(0);