integrated Peter Hartlich's patch, removed const char *c from union, simplified togglelayout

This commit is contained in:
Anselm R Garbe 2008-06-11 09:34:00 +01:00
parent a8e0772c4d
commit c56533615f
2 changed files with 9 additions and 26 deletions

View file

@ -10,8 +10,8 @@
#define SELFGCOLOR "#ffffff" #define SELFGCOLOR "#ffffff"
static uint borderpx = 1; /* border pixel of windows */ static uint borderpx = 1; /* border pixel of windows */
static uint snap = 32; /* snap pixel */ static uint snap = 32; /* snap pixel */
static Bool showbar = True; /* False means no bar */ static Bool showbar = True; /* False means no bar */
static Bool topbar = True; /* False means bottom bar */ static Bool topbar = True; /* False means bottom bar */
/* tagging */ /* tagging */
static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
@ -42,8 +42,8 @@ static Layout layouts[] = {
static Key keys[] = { static Key keys[] = {
/* modifier key function argument */ /* modifier key function argument */
{ MODKEY, XK_p, spawn, {.c = "exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }}, { MODKEY, XK_p, spawn, {.v = (char *[]){"dmenu_run", "-fn", FONT, "-nb", NORMBGCOLOR, "-nf", NORMFGCOLOR, "-sb", SELBGCOLOR, "-sf", SELFGCOLOR, NULL}} },
{ MODKEY|ShiftMask, XK_Return, spawn, {.c = "exec uxterm" }}, { MODKEY|ShiftMask, XK_Return, spawn, {.v = (char *[]){"uxterm", NULL}} },
{ MODKEY, XK_b, togglebar, {0}}, { MODKEY, XK_b, togglebar, {0}},
{ MODKEY, XK_j, focusstack, {.i = +1 }}, { MODKEY, XK_j, focusstack, {.i = +1 }},
{ MODKEY, XK_k, focusstack, {.i = -1 }}, { MODKEY, XK_k, focusstack, {.i = -1 }},

27
dwm.c
View file

@ -93,11 +93,10 @@ typedef struct {
} DC; /* draw context */ } DC; /* draw context */
typedef union { typedef union {
const char *c;
int i; int i;
uint ui; uint ui;
float f; float f;
void *aux; void *v;
} Arg; } Arg;
typedef struct { typedef struct {
@ -1388,10 +1387,6 @@ setup(void) {
void void
spawn(const Arg *arg) { spawn(const Arg *arg) {
static char *shell = NULL;
if(!shell && !(shell = getenv("SHELL")))
shell = "/bin/sh";
/* The double-fork construct avoids zombie processes and keeps the code /* The double-fork construct avoids zombie processes and keeps the code
* clean from stupid signal handlers. */ * clean from stupid signal handlers. */
if(fork() == 0) { if(fork() == 0) {
@ -1399,8 +1394,8 @@ spawn(const Arg *arg) {
if(dpy) if(dpy)
close(ConnectionNumber(dpy)); close(ConnectionNumber(dpy));
setsid(); setsid();
execl(shell, shell, "-c", arg->c, (char *)NULL); execvp(((char **)arg->v)[0], (char **)arg->v);
fprintf(stderr, "dwm: execl '%s -c %s'", shell, arg->c); fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
perror(" failed"); perror(" failed");
} }
exit(0); exit(0);
@ -1481,20 +1476,8 @@ togglefloating(const Arg *arg) {
void void
togglelayout(const Arg *arg) { togglelayout(const Arg *arg) {
uint i; if(++lt == &layouts[LENGTH(layouts)])
lt = &layouts[0];
if(!arg->c) {
if(++lt == &layouts[LENGTH(layouts)])
lt = &layouts[0];
}
else {
for(i = 0; i < LENGTH(layouts); i++)
if(!strcmp(arg->c, layouts[i].symbol))
break;
if(i == LENGTH(layouts))
return;
lt = &layouts[i];
}
if(sel) if(sel)
arrange(); arrange();
else else