integrated Peter Hartlich's patch, removed const char *c from union, simplified togglelayout c5653361
Anselm R Garbe · 2008-06-11 09:34 2 file(s) · +9 −26
config.def.h +4 −4
10 10
#define SELFGCOLOR      "#ffffff"
11 11
static uint borderpx  = 1;        /* border pixel of windows */
12 12
static uint snap      = 32;       /* snap pixel */
13 -
static Bool showbar           = True;     /* False means no bar */
14 -
static Bool topbar            = True;     /* False means bottom bar */
13 +
static Bool showbar   = True;     /* False means no bar */
14 +
static Bool topbar    = True;     /* False means bottom bar */
15 15
16 16
/* tagging */
17 17
static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
42 42
43 43
static Key keys[] = {
44 44
	/* modifier                     key        function        argument */
45 -
	{ MODKEY,                       XK_p,      spawn,          {.c = "exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }},
46 -
	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.c = "exec uxterm" }},
45 +
	{ MODKEY,                       XK_p,      spawn,          {.v = (char *[]){"dmenu_run", "-fn", FONT, "-nb", NORMBGCOLOR, "-nf", NORMFGCOLOR, "-sb", SELBGCOLOR, "-sf", SELFGCOLOR, NULL}} },
46 +
	{ MODKEY|ShiftMask,             XK_Return, spawn,          {.v = (char *[]){"uxterm", NULL}} },
47 47
	{ MODKEY,                       XK_b,      togglebar,      {0}},
48 48
	{ MODKEY,                       XK_j,      focusstack,     {.i = +1  }},
49 49
	{ MODKEY,                       XK_k,      focusstack,     {.i = -1  }},
dwm.c +5 −22
93 93
} DC; /* draw context */
94 94
95 95
typedef union {
96 -
	const char *c;
97 96
	int i;
98 97
	uint ui;
99 98
	float f;
100 -
	void *aux;
99 +
	void *v;
101 100
} Arg;
102 101
103 102
typedef struct {
1388 1387
1389 1388
void
1390 1389
spawn(const Arg *arg) {
1391 -
	static char *shell = NULL;
1392 -
1393 -
	if(!shell && !(shell = getenv("SHELL")))
1394 -
		shell = "/bin/sh";
1395 1390
	/* The double-fork construct avoids zombie processes and keeps the code
1396 1391
	 * clean from stupid signal handlers. */
1397 1392
	if(fork() == 0) {
1399 1394
			if(dpy)
1400 1395
				close(ConnectionNumber(dpy));
1401 1396
			setsid();
1402 -
			execl(shell, shell, "-c", arg->c, (char *)NULL);
1403 -
			fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->c);
1397 +
			execvp(((char **)arg->v)[0], (char **)arg->v);
1398 +
			fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
1404 1399
			perror(" failed");
1405 1400
		}
1406 1401
		exit(0);
1481 1476
1482 1477
void
1483 1478
togglelayout(const Arg *arg) {
1484 -
	uint i;
1485 -
1486 -
	if(!arg->c) {
1487 -
		if(++lt == &layouts[LENGTH(layouts)])
1488 -
			lt = &layouts[0];
1489 -
	}
1490 -
	else {
1491 -
		for(i = 0; i < LENGTH(layouts); i++)
1492 -
			if(!strcmp(arg->c, layouts[i].symbol))
1493 -
				break;
1494 -
		if(i == LENGTH(layouts))
1495 -
			return;
1496 -
		lt = &layouts[i];
1497 -
	}
1479 +
	if(++lt == &layouts[LENGTH(layouts)])
1480 +
		lt = &layouts[0];
1498 1481
	if(sel)
1499 1482
		arrange();
1500 1483
	else