commit ce18cfdbb2852f99c364f91f39b143a7a6475071
parent 427ebf4bc754260c6174d4c70bacf3e277d419b0
Author: Cem Keylan <cem@ckyln.com>
Date: Thu, 14 Nov 2019 12:00:55 +0300
add restartsig patch
Diffstat:
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/config.def.h b/config.def.h
@@ -116,7 +116,7 @@ static Key keys[] = {
{ WINKEY, XK_h, setgaps, {.i = 0 } },
{ WINKEY, XK_i, incnmaster, {.i = +1 } },
{ WINKEY, XK_l, incnmaster, {.i = -1 } },
- { MODKEY|ShiftMask, XK_e, quit, {0} },
+ { MODKEY|ControlMask|ShiftMask, XK_q, quit, {1} },
{ WINKEY, XK_5, xrdb, {.v = NULL } },
TAGKEYS( XK_1, 0)
TAGKEYS( XK_2, 1)
diff --git a/dwm.1 b/dwm.1
@@ -148,6 +148,9 @@ Add/remove all windows with nth tag to/from the view.
.TP
.B Mod1\-Shift\-e
Quit dwm.
+.TP
+.B Mod1\-Control\-Shift\-q
+Restart dwm.
.SS Mouse commands
.TP
.B Mod1\-Button1
@@ -161,6 +164,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
@@ -227,6 +227,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 void tag(const Arg *arg);
static void tagmon(const Arg *arg);
@@ -284,6 +286,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;
@@ -1313,6 +1316,7 @@ propertynotify(XEvent *e)
void
quit(const Arg *arg)
{
+ if(arg->i) restart = 1;
running = 0;
}
@@ -1624,6 +1628,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);
@@ -1725,6 +1732,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)
@@ -2268,6 +2289,7 @@ main(int argc, char *argv[])
#endif /* __OpenBSD__ */
scan();
run();
+ if(restart) execvp(argv[0], argv);
cleanup();
XCloseDisplay(dpy);
return EXIT_SUCCESS;