summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.h6
-rw-r--r--dwm.110
-rw-r--r--dwm.c22
3 files changed, 35 insertions, 3 deletions
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);
@@ -1927,6 +1934,20 @@ sigchld(int unused)
}
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)
{
if (arg->v == dmenucmd)
@@ -2492,6 +2513,7 @@ main(int argc, char *argv[])
scan();
runAutostart();
run();
+ if(restart) execvp(argv[0], argv);
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;