restartsig patch

- Apply restartsig patch
- Add keybinding for restarting dwm
- Update man page with keybinding
- Update README with patch link
This commit is contained in:
Sravan Balaji
2020-08-30 15:29:14 -04:00
parent e7ece2aaba
commit e896c3107e
4 changed files with 89 additions and 55 deletions

View File

@@ -56,6 +56,7 @@ and (re)compiling the source code.
* [cyclelayouts](https://dwm.suckless.org/patches/cyclelayouts/) * [cyclelayouts](https://dwm.suckless.org/patches/cyclelayouts/)
* [gridmode](https://dwm.suckless.org/patches/gridmode/) * [gridmode](https://dwm.suckless.org/patches/gridmode/)
* [movestack](https://dwm.suckless.org/patches/movestack/) * [movestack](https://dwm.suckless.org/patches/movestack/)
* [restartsig](https://dwm.suckless.org/patches/restartsig/)
* [ru_gaps](https://dwm.suckless.org/patches/ru_gaps/) * [ru_gaps](https://dwm.suckless.org/patches/ru_gaps/)
* [systray](https://dwm.suckless.org/patches/systray/) * [systray](https://dwm.suckless.org/patches/systray/)

View File

@@ -143,6 +143,7 @@ static Key keys[] = {
TAGKEYS( XK_8, 7) TAGKEYS( XK_8, 7)
TAGKEYS( XK_9, 8) TAGKEYS( XK_9, 8)
{ MODKEY|ShiftMask, XK_q, quit, {0} }, { MODKEY|ShiftMask, XK_q, quit, {0} },
{ MODKEY|ControlMask|ShiftMask, XK_q, quit, {1} },
}; };
/* button definitions */ /* button definitions */

10
dwm.1
View File

@@ -193,6 +193,9 @@ Add/remove all windows with nth tag to/from the view.
.TP .TP
.B Mod1\-Shift\-q .B Mod1\-Shift\-q
Quit dwm. Quit dwm.
.TP
.B Mod1\-Control\-Shift\-q
Restart dwm.
.SS Mouse commands .SS Mouse commands
.TP .TP
.B Mod1\-Button1 .B Mod1\-Button1
@@ -218,6 +221,13 @@ This file is started before any autostart.sh; dwm waits for its termination.
.SH CUSTOMIZATION .SH CUSTOMIZATION
dwm is customized by creating a custom config.h and (re)compiling the source dwm is customized by creating a custom config.h and (re)compiling the source
code. This keeps it fast, secure and simple. 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 .SH SEE ALSO
.BR rofi (1), .BR rofi (1),
.BR st (1) .BR st (1)

22
dwm.c
View File

@@ -240,6 +240,8 @@ static void setup(void);
static void seturgent(Client *c, int urg); static void seturgent(Client *c, int urg);
static void showhide(Client *c); static void showhide(Client *c);
static void sigchld(int unused); static void sigchld(int unused);
static void sighup(int unused);
static void sigterm(int unused);
static void spawn(const Arg *arg); static void spawn(const Arg *arg);
static Monitor *systraytomon(Monitor *m); static Monitor *systraytomon(Monitor *m);
static void tag(const Arg *arg); static void tag(const Arg *arg);
@@ -316,6 +318,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
[UnmapNotify] = unmapnotify [UnmapNotify] = unmapnotify
}; };
static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast]; static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast];
static int restart = 0;
static int running = 1; static int running = 1;
static Cur *cursor[CurLast]; static Cur *cursor[CurLast];
static Clr **scheme; static Clr **scheme;
@@ -1456,6 +1459,7 @@ propertynotify(XEvent *e)
void void
quit(const Arg *arg) quit(const Arg *arg)
{ {
if(arg->i) restart = 1;
running = 0; running = 0;
} }
@@ -1900,6 +1904,9 @@ setup(void)
/* clean up any zombies immediately */ /* clean up any zombies immediately */
sigchld(0); sigchld(0);
signal(SIGHUP, sighup);
signal(SIGTERM, sigterm);
/* init screen */ /* init screen */
screen = DefaultScreen(dpy); screen = DefaultScreen(dpy);
sw = DisplayWidth(dpy, screen); sw = DisplayWidth(dpy, screen);
@@ -2009,6 +2016,20 @@ sigchld(int unused)
while (0 < waitpid(-1, NULL, WNOHANG)); 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 void
spawn(const Arg *arg) spawn(const Arg *arg)
{ {
@@ -2691,6 +2712,7 @@ main(int argc, char *argv[])
runautostart(); runautostart();
run(); run();
runautoquit(); runautoquit();
if(restart) execvp(argv[0], argv);
cleanup(); cleanup();
XCloseDisplay(dpy); XCloseDisplay(dpy);
return EXIT_SUCCESS; return EXIT_SUCCESS;