summaryrefslogtreecommitdiff
path: root/dwm.c
diff options
context:
space:
mode:
authorLuke Smith <luke@lukesmith.xyz>2020-04-10 18:50:44 -0400
committerLuke Smith <luke@lukesmith.xyz>2020-04-10 18:50:44 -0400
commit4435aad841c9366120398e4e5335fd0b38ba12f6 (patch)
treea169d6e102f0e1076a8360b278fd5f660f342e81 /dwm.c
parent0c7a69973f160b4dd6ad962f3701e0d391827379 (diff)
kill -HUP pid to restart, also mod+R
Diffstat (limited to 'dwm.c')
-rw-r--r--dwm.c22
1 files changed, 22 insertions, 0 deletions
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;