dwm

my build of dwm
git clone git://git.ckyln.com/~cem/dwm.git
Log | Files | Refs | README | LICENSE

commit ce18cfdbb2852f99c364f91f39b143a7a6475071
parent 427ebf4bc754260c6174d4c70bacf3e277d419b0
Author: Cem Keylan <cem@ckyln.com>
Date:   Thu, 14 Nov 2019 12:00:55 +0300

add restartsig patch

Diffstat:
Mconfig.def.h | 2+-
Mdwm.1 | 10++++++++++
Mdwm.c | 22++++++++++++++++++++++
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;