integrated Peter Hartlich's patch, removed const char *c from union, simplified togglelayout
c5653361
2 file(s) · +9 −26
| 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 }}, |
|
| 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 |
|