109 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			109 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
|  | diff --git a/config.def.h b/config.def.h
 | ||
|  | index 9efa774..3e9f854 100644
 | ||
|  | --- a/config.def.h
 | ||
|  | +++ b/config.def.h
 | ||
|  | @@ -95,6 +95,7 @@ static const Key keys[] = {
 | ||
|  |  	TAGKEYS(                        XK_8,                      7) | ||
|  |  	TAGKEYS(                        XK_9,                      8) | ||
|  |  	{ MODKEY|ShiftMask,             XK_q,      quit,           {0} }, | ||
|  | +	{ MODKEY|ControlMask|ShiftMask, XK_q,      quit,           {1} },
 | ||
|  |  }; | ||
|  |   | ||
|  |  /* button definitions */ | ||
|  | diff --git a/dwm.1 b/dwm.1
 | ||
|  | index ddc8321..7b6cadb 100644
 | ||
|  | --- a/dwm.1
 | ||
|  | +++ b/dwm.1
 | ||
|  | @@ -142,6 +142,9 @@ Add/remove all windows with nth tag to/from the view.
 | ||
|  |  .TP | ||
|  |  .B Mod1\-Shift\-q | ||
|  |  Quit dwm. | ||
|  | +.TP
 | ||
|  | +.B Mod1\-Control\-Shift\-q
 | ||
|  | +Restart dwm.
 | ||
|  |  .SS Mouse commands | ||
|  |  .TP | ||
|  |  .B Mod1\-Button1 | ||
|  | @@ -155,6 +158,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
 | ||
|  | index 1443802..d183e80 100644
 | ||
|  | --- a/dwm.c
 | ||
|  | +++ b/dwm.c
 | ||
|  | @@ -204,6 +204,8 @@ static void setmfact(const Arg *arg);
 | ||
|  |  static void setup(void); | ||
|  |  static void seturgent(Client *c, int urg); | ||
|  |  static void showhide(Client *c); | ||
|  | +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); | ||
|  | @@ -259,6 +261,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; | ||
|  | @@ -1257,6 +1260,7 @@ propertynotify(XEvent *e)
 | ||
|  |  void | ||
|  |  quit(const Arg *arg) | ||
|  |  { | ||
|  | +	if(arg->i) restart = 1;
 | ||
|  |  	running = 0; | ||
|  |  } | ||
|  |   | ||
|  | @@ -1552,6 +1556,9 @@ setup(void)
 | ||
|  |  	/* clean up any zombies (inherited from .xinitrc etc) immediately */ | ||
|  |  	while (waitpid(-1, NULL, WNOHANG) > 0); | ||
|  |   | ||
|  | +	signal(SIGHUP, sighup);
 | ||
|  | +	signal(SIGTERM, sigterm);
 | ||
|  | +
 | ||
|  |  	/* init screen */ | ||
|  |  	screen = DefaultScreen(dpy); | ||
|  |  	sw = DisplayWidth(dpy, screen); | ||
|  | @@ -1643,6 +1650,20 @@ showhide(Client *c)
 | ||
|  |  	} | ||
|  |  } | ||
|  |   | ||
|  | +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) | ||
|  |  { | ||
|  | @@ -2158,6 +2179,7 @@ main(int argc, char *argv[])
 | ||
|  |  #endif /* __OpenBSD__ */ | ||
|  |  	scan(); | ||
|  |  	run(); | ||
|  | +	if(restart) execvp(argv[0], argv);
 | ||
|  |  	cleanup(); | ||
|  |  	XCloseDisplay(dpy); | ||
|  |  	return EXIT_SUCCESS; |