diff --git a/config.h b/config.h index f6756ba..60028a6 100644 --- a/config.h +++ b/config.h @@ -133,7 +133,7 @@ static Key keys[] = { { MODKEY, XK_e, spawn, SHCMD("st -e neomutt ; pkill -RTMIN+12 dwmblocks; rmdir ~/.abook") }, { MODKEY|ShiftMask, XK_e, spawn, SHCMD("tutorialvids") }, { MODKEY, XK_r, spawn, SHCMD("st -e lf") }, - /* { MODKEY|ShiftMask, XK_r, spawn, SHCMD("") }, */ + { MODKEY|ShiftMask, XK_r, quit, {1} }, { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, /* { MODKEY|ShiftMask, XK_t, spawn, SHCMD("") }, */ { MODKEY, XK_y, setlayout, {.v = &layouts[4]} }, @@ -153,7 +153,7 @@ static Key keys[] = { { MODKEY, XK_backslash, view, {0} }, /* { MODKEY|ShiftMask, XK_backslash, spawn, SHCMD("") }, */ - { MODKEY, XK_a, spawn, {.v = audiocontrol} }, + { MODKEY, XK_a, spawn, {.v = audiocontrol } }, /* { MODKEY|ShiftMask, XK_a, spawn, SHCMD("") }, */ { MODKEY, XK_s, togglesticky, {0} }, /* { MODKEY|ShiftMask, XK_s, spawn, SHCMD("") }, */ @@ -245,7 +245,7 @@ static Key keys[] = { { 0, XF86XK_TouchpadOn, spawn, SHCMD("synclient TouchpadOff=0") }, { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("xbacklight -inc 15") }, { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("xbacklight -dec 15") }, - + /* { MODKEY, XK_space, setlayout, {0} }, */ /* { MODKEY, XK_comma, focusmon, {.i = -1 } }, */ diff --git a/dwm.1 b/dwm.1 index 14205ab..8c457b5 100644 --- a/dwm.1 +++ b/dwm.1 @@ -137,6 +137,9 @@ Add/remove all windows with nth tag to/from the view. .TP .B Super\-Shift\-q Quit dwm. +.TP +.B Mod1\-Control\-Shift\-q +Restart dwm. .SS Mouse commands .TP .B Super\-Left click @@ -150,6 +153,13 @@ Resize focused window while dragging. Tiled windows will be toggled to the float .SH CUSTOMIZATION dwm is customized by creating a custom config.h and (re)compiling the source code. This keeps it fast, secure and simple. +.SH SIGNALS +.TP +.B SIGHUP - 1 +Restart the dwm process. +.TP +.B SIGTERM - 15 +Cleanly terminate the dwm process. .SH SEE ALSO .BR dmenu (1), .BR st (1) diff --git a/dwm.c b/dwm.c index 8f08bea..02e24e6 100644 --- a/dwm.c +++ b/dwm.c @@ -249,6 +249,8 @@ static void setup(void); static void seturgent(Client *c, int urg); static void showhide(Client *c); static void sigchld(int unused); +static void sighup(int unused); +static void sigterm(int unused); static void spawn(const Arg *arg); static int stackpos(const Arg *arg); static void tag(const Arg *arg); @@ -314,6 +316,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { [UnmapNotify] = unmapnotify }; static Atom wmatom[WMLast], netatom[NetLast]; +static int restart = 0; static int running = 1; static Cur *cursor[CurLast]; static Clr **scheme; @@ -1393,6 +1396,7 @@ propertynotify(XEvent *e) void quit(const Arg *arg) { + if(arg->i) restart = 1; running = 0; } @@ -1822,6 +1826,9 @@ setup(void) /* clean up any zombies immediately */ sigchld(0); + signal(SIGHUP, sighup); + signal(SIGTERM, sigterm); + /* init screen */ screen = DefaultScreen(dpy); sw = DisplayWidth(dpy, screen); @@ -1926,6 +1933,20 @@ sigchld(int unused) while (0 < waitpid(-1, NULL, WNOHANG)); } +void +sighup(int unused) +{ + Arg a = {.i = 1}; + quit(&a); +} + +void +sigterm(int unused) +{ + Arg a = {.i = 0}; + quit(&a); +} + void spawn(const Arg *arg) { @@ -2492,6 +2513,7 @@ main(int argc, char *argv[]) scan(); runAutostart(); run(); + if(restart) execvp(argv[0], argv); cleanup(); XCloseDisplay(dpy); return EXIT_SUCCESS;