| dwm-restartsig-20180523-6.2.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dwm-restartsig-20180523-6.2.diff (3313B) | |
| --- | |
| 1 From 2991f37f0aaf44b9f9b11e7893ff0af8eb88f649 Mon Sep 17 00:00:00 2001 | |
| 2 From: Christopher Drelich <[email protected]> | |
| 3 Date: Wed, 23 May 2018 22:50:38 -0400 | |
| 4 Subject: [PATCH] Modifies quit to handle restarts and adds SIGHUP and SI… | |
| 5 handlers. | |
| 6 | |
| 7 Modified quit() to restart if it receives arg .i = 1 | |
| 8 MOD+CTRL+SHIFT+Q was added to confid.def.h to do just that. | |
| 9 | |
| 10 Signal handlers were handled for SIGHUP and SIGTERM. | |
| 11 If dwm receives these signals it calls quit() with | |
| 12 arg .i = to 1 or 0, respectively. | |
| 13 | |
| 14 To restart dwm: | |
| 15 MOD+CTRL+SHIFT+Q | |
| 16 or | |
| 17 kill -HUP dwmpid | |
| 18 | |
| 19 To quit dwm cleanly: | |
| 20 MOD+SHIFT+Q | |
| 21 or | |
| 22 kill -TERM dwmpid | |
| 23 --- | |
| 24 config.def.h | 1 + | |
| 25 dwm.1 | 10 ++++++++++ | |
| 26 dwm.c | 22 ++++++++++++++++++++++ | |
| 27 3 files changed, 33 insertions(+) | |
| 28 | |
| 29 diff --git a/config.def.h b/config.def.h | |
| 30 index a9ac303..e559429 100644 | |
| 31 --- a/config.def.h | |
| 32 +++ b/config.def.h | |
| 33 @@ -94,6 +94,7 @@ static Key keys[] = { | |
| 34 TAGKEYS( XK_8, 7) | |
| 35 TAGKEYS( XK_9, 8) | |
| 36 { MODKEY|ShiftMask, XK_q, quit, {0} … | |
| 37 + { MODKEY|ControlMask|ShiftMask, XK_q, quit, {1} … | |
| 38 }; | |
| 39 | |
| 40 /* button definitions */ | |
| 41 diff --git a/dwm.1 b/dwm.1 | |
| 42 index 13b3729..36a331c 100644 | |
| 43 --- a/dwm.1 | |
| 44 +++ b/dwm.1 | |
| 45 @@ -142,6 +142,9 @@ Add/remove all windows with nth tag to/from the view. | |
| 46 .TP | |
| 47 .B Mod1\-Shift\-q | |
| 48 Quit dwm. | |
| 49 +.TP | |
| 50 +.B Mod1\-Control\-Shift\-q | |
| 51 +Restart dwm. | |
| 52 .SS Mouse commands | |
| 53 .TP | |
| 54 .B Mod1\-Button1 | |
| 55 @@ -155,6 +158,13 @@ Resize focused window while dragging. Tiled windows… | |
| 56 .SH CUSTOMIZATION | |
| 57 dwm is customized by creating a custom config.h and (re)compiling the s… | |
| 58 code. This keeps it fast, secure and simple. | |
| 59 +.SH SIGNALS | |
| 60 +.TP | |
| 61 +.B SIGHUP - 1 | |
| 62 +Restart the dwm process. | |
| 63 +.TP | |
| 64 +.B SIGTERM - 15 | |
| 65 +Cleanly terminate the dwm process. | |
| 66 .SH SEE ALSO | |
| 67 .BR dmenu (1), | |
| 68 .BR st (1) | |
| 69 diff --git a/dwm.c b/dwm.c | |
| 70 index bb95e26..286eecd 100644 | |
| 71 --- a/dwm.c | |
| 72 +++ b/dwm.c | |
| 73 @@ -205,6 +205,8 @@ static void setup(void); | |
| 74 static void seturgent(Client *c, int urg); | |
| 75 static void showhide(Client *c); | |
| 76 static void sigchld(int unused); | |
| 77 +static void sighup(int unused); | |
| 78 +static void sigterm(int unused); | |
| 79 static void spawn(const Arg *arg); | |
| 80 static void tag(const Arg *arg); | |
| 81 static void tagmon(const Arg *arg); | |
| 82 @@ -260,6 +262,7 @@ static void (*handler[LASTEvent]) (XEvent *) = { | |
| 83 [UnmapNotify] = unmapnotify | |
| 84 }; | |
| 85 static Atom wmatom[WMLast], netatom[NetLast]; | |
| 86 +static int restart = 0; | |
| 87 static int running = 1; | |
| 88 static Cur *cursor[CurLast]; | |
| 89 static Clr **scheme; | |
| 90 @@ -1248,6 +1251,7 @@ propertynotify(XEvent *e) | |
| 91 void | |
| 92 quit(const Arg *arg) | |
| 93 { | |
| 94 + if(arg->i) restart = 1; | |
| 95 running = 0; | |
| 96 } | |
| 97 | |
| 98 @@ -1536,6 +1540,9 @@ setup(void) | |
| 99 /* clean up any zombies immediately */ | |
| 100 sigchld(0); | |
| 101 | |
| 102 + signal(SIGHUP, sighup); | |
| 103 + signal(SIGTERM, sigterm); | |
| 104 + | |
| 105 /* init screen */ | |
| 106 screen = DefaultScreen(dpy); | |
| 107 sw = DisplayWidth(dpy, screen); | |
| 108 @@ -1637,6 +1644,20 @@ sigchld(int unused) | |
| 109 } | |
| 110 | |
| 111 void | |
| 112 +sighup(int unused) | |
| 113 +{ | |
| 114 + Arg a = {.i = 1}; | |
| 115 + quit(&a); | |
| 116 +} | |
| 117 + | |
| 118 +void | |
| 119 +sigterm(int unused) | |
| 120 +{ | |
| 121 + Arg a = {.i = 0}; | |
| 122 + quit(&a); | |
| 123 +} | |
| 124 + | |
| 125 +void | |
| 126 spawn(const Arg *arg) | |
| 127 { | |
| 128 if (arg->v == dmenucmd) | |
| 129 @@ -2139,6 +2160,7 @@ main(int argc, char *argv[]) | |
| 130 setup(); | |
| 131 scan(); | |
| 132 run(); | |
| 133 + if(restart) execvp(argv[0], argv); | |
| 134 cleanup(); | |
| 135 XCloseDisplay(dpy); | |
| 136 return EXIT_SUCCESS; | |
| 137 -- | |
| 138 2.7.4 | |
| 139 |