From 42548543374d64627f38733993a115666a9752b1 Mon Sep 17 00:00:00 2001 From: lucy Date: Tue, 9 Jun 2026 16:40:33 +0200 Subject: [PATCH] add restartsig patch --- config.def.h | 1 + config.def.h.orig | 3 + config.h | 2 +- dwm | Bin 74768 -> 74792 bytes dwm.1 | 10 +++ dwm.1.orig | 199 ++++++++++++++++++++++++++++++++++++++++++++++ dwm.c | 22 +++++ dwm.c.orig | 29 +++++-- dwm.o | Bin 64032 -> 64480 bytes selfrestart.c | 65 +++++++++++++++ 10 files changed, 322 insertions(+), 9 deletions(-) create mode 100644 dwm.1.orig create mode 100644 selfrestart.c diff --git a/config.def.h b/config.def.h index fb6148f..777a96e 100644 --- a/config.def.h +++ b/config.def.h @@ -117,6 +117,7 @@ static 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/config.def.h.orig b/config.def.h.orig index e69f288..fb6148f 100644 --- a/config.def.h.orig +++ b/config.def.h.orig @@ -104,6 +104,9 @@ static Key keys[] = { { MODKEY, XK_period, focusmon, {.i = +1 } }, { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, + { MODKEY, XK_minus, setgaps, {.i = -1 } }, + { MODKEY, XK_equal, setgaps, {.i = +1 } }, + { MODKEY|ShiftMask, XK_equal, setgaps, {.i = 0 } }, TAGKEYS( XK_1, 0) TAGKEYS( XK_2, 1) TAGKEYS( XK_3, 2) diff --git a/config.h b/config.h index 3eaf16d..aa34896 100644 --- a/config.h +++ b/config.h @@ -120,7 +120,7 @@ static Key keys[] = { TAGKEYS( XK_8, 7) TAGKEYS( XK_9, 8) { MODKEY|ShiftMask, XK_r, quit, {0} }, - { MODKEY|ShiftMask, XK_q, spawn, {.v = quit_dwm} }, + { MODKEY|ShiftMask, XK_q, quit, {1} }, { 0, XF86XK_MonBrightnessUp, spawn, {.v = brighter } }, { 0, XF86XK_MonBrightnessDown, spawn, {.v = dimmer } }, { 0, XF86XK_AudioLowerVolume, spawn, {.v = vol_down } }, diff --git a/dwm b/dwm index f07538c9fb72a5d116f8a9ae319288dacfa8b0fd..e63b7f0ec5ed1ebcc41cdaf70ac414e302de6caa 100755 GIT binary patch delta 22933 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 Of^gLtr=OBxlmh@-ig{fC diff --git a/dwm.1 b/dwm.1 index 9533aa6..809660f 100644 --- a/dwm.1 +++ b/dwm.1 @@ -150,6 +150,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 @@ -178,6 +181,13 @@ This file is started before any autostart.sh; dwm waits for its termination. .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.1.orig b/dwm.1.orig new file mode 100644 index 0000000..9533aa6 --- /dev/null +++ b/dwm.1.orig @@ -0,0 +1,199 @@ +.TH DWM 1 dwm\-VERSION +.SH NAME +dwm \- dynamic window manager +.SH SYNOPSIS +.B dwm +.RB [ \-v ] +.SH DESCRIPTION +dwm is a dynamic window manager for X. It manages windows in tiled, monocle +and floating layouts. Either layout can be applied dynamically, optimising the +environment for the application in use and the task performed. +.P +In tiled layouts windows are managed in a master and stacking area. The master +area on the left contains one window by default, and the stacking area on the +right contains all other windows. The number of master area windows can be +adjusted from zero to an arbitrary number. In monocle layout all windows are +maximised to the screen size. In floating layout windows can be resized and +moved freely. Dialog windows are always managed floating, regardless of the +layout applied. +.P +Windows are grouped by tags. Each window can be tagged with one or multiple +tags. Selecting certain tags displays all windows with these tags. +.P +Each screen contains a small status bar which displays all available tags, the +layout, the title of the focused window, and the text read from the root window +name property, if the screen is focused. A floating window is indicated with an +empty square and a maximised floating window is indicated with a filled square +before the windows title. The selected tags are indicated with a different +color. The tags of the focused window are indicated with a filled square in the +top left corner. The tags which are applied to one or more windows are +indicated with an empty square in the top left corner. +.P +dwm draws a small border around windows to indicate the focus state. +.P +On start, dwm can start additional programs that may be specified in two special +shell scripts (see the FILES section below), autostart_blocking.sh and +autostart.sh. The former is executed first and dwm will wait for its +termination before starting. The latter is executed in the background before +dwm enters its handler loop. +.P +Either of these files may be omitted. +.SH OPTIONS +.TP +.B \-v +prints version information to standard output, then exits. +.SH USAGE +.SS Status bar +.TP +.B X root window name +is read and displayed in the status text area. It can be set with the +.BR xsetroot (1) +command. +.TP +.B Button1 +click on a tag label to display all windows with that tag, click on the layout +label toggles between tiled and floating layout. +.TP +.B Button3 +click on a tag label adds/removes all windows with that tag to/from the view. +.TP +.B Mod1\-Button1 +click on a tag label applies that tag to the focused window. +.TP +.B Mod1\-Button3 +click on a tag label adds/removes that tag to/from the focused window. +.SS Keyboard commands +.TP +.B Mod1\-Shift\-Return +Start +.BR st(1). +.TP +.B Mod1\-p +Spawn +.BR dmenu(1) +for launching other programs. +.TP +.B Mod1\-, +Focus previous screen, if any. +.TP +.B Mod1\-. +Focus next screen, if any. +.TP +.B Mod1\-Shift\-, +Send focused window to previous screen, if any. +.TP +.B Mod1\-Shift\-. +Send focused window to next screen, if any. +.TP +.B Mod1\-b +Toggles bar on and off. +.TP +.B Mod1\-t +Sets tiled layout. +.TP +.B Mod1\-f +Sets floating layout. +.TP +.B Mod1\-m +Sets monocle layout. +.TP +.B Mod1\-space +Toggles between current and previous layout. +.TP +.B Mod1\-j +Focus next window. +.TP +.B Mod1\-k +Focus previous window. +.TP +.B Mod1\-i +Increase number of windows in master area. +.TP +.B Mod1\-d +Decrease number of windows in master area. +.TP +.B Mod1\-l +Increase master area size. +.TP +.B Mod1\-h +Decrease master area size. +.TP +.B Mod1\-Return +Zooms/cycles focused window to/from master area (tiled layouts only). +.TP +.B Mod1\-Shift\-c +Close focused window. +.TP +.B Mod1\-Shift\-space +Toggle focused window between tiled and floating state. +.TP +.B Mod1\-Tab +Toggles to the previously selected tags. +.TP +.B Mod1\-Shift\-[1..n] +Apply nth tag to focused window. +.TP +.B Mod1\-Shift\-0 +Apply all tags to focused window. +.TP +.B Mod1\-Control\-Shift\-[1..n] +Add/remove nth tag to/from focused window. +.TP +.B Mod1\-[1..n] +View all windows with nth tag. +.TP +.B Mod1\-0 +View all windows with any tag. +.TP +.B Mod1\-Control\-[1..n] +Add/remove all windows with nth tag to/from the view. +.TP +.B Mod1\-Shift\-q +Quit dwm. +.SS Mouse commands +.TP +.B Mod1\-Button1 +Move focused window while dragging. Tiled windows will be toggled to the floating state. +.TP +.B Mod1\-Button2 +Toggles focused window between floating and tiled state. +.TP +.B Mod1\-Button3 +Resize focused window while dragging. Tiled windows will be toggled to the floating state. +.SH FILES +The files containing programs to be started along with dwm are searched for in +the following directories: +.IP "1. $XDG_DATA_HOME/dwm" +.IP "2. $HOME/.local/share/dwm" +.IP "3. $HOME/.dwm" +.P +The first existing directory is scanned for any of the autostart files below. +.TP 15 +autostart.sh +This file is started as a shell background process before dwm enters its handler +loop. +.TP 15 +autostart_blocking.sh +This file is started before any autostart.sh; dwm waits for its termination. +.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 SEE ALSO +.BR dmenu (1), +.BR st (1) +.SH ISSUES +Java applications which use the XToolkit/XAWT backend may draw grey windows +only. The XToolkit/XAWT backend breaks ICCCM-compliance in recent JDK 1.5 and early +JDK 1.6 versions, because it assumes a reparenting window manager. Possible workarounds +are using JDK 1.4 (which doesn't contain the XToolkit/XAWT backend) or setting the +environment variable +.BR AWT_TOOLKIT=MToolkit +(to use the older Motif backend instead) or running +.B xprop -root -f _NET_WM_NAME 32a -set _NET_WM_NAME LG3D +or +.B wmname LG3D +(to pretend that a non-reparenting window manager is running that the +XToolkit/XAWT backend can recognize) or when using OpenJDK setting the environment variable +.BR _JAVA_AWT_WM_NONREPARENTING=1 . +.SH BUGS +Send all bug reports with a patch to hackers@suckless.org. diff --git a/dwm.c b/dwm.c index ed2a82b..2efb8b7 100644 --- a/dwm.c +++ b/dwm.c @@ -226,6 +226,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); @@ -287,6 +289,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; @@ -1297,6 +1300,7 @@ propertynotify(XEvent *e) void quit(const Arg *arg) { + if(arg->i) restart = 1; running = 0; } @@ -1672,6 +1676,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); @@ -1772,6 +1779,20 @@ sigchld(int unused) 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 spawn(const Arg *arg) { @@ -2336,6 +2357,7 @@ main(int argc, char *argv[]) scan(); runautostart(); run(); + if(restart) execvp(argv[0], argv); cleanup(); XCloseDisplay(dpy); return EXIT_SUCCESS; diff --git a/dwm.c.orig b/dwm.c.orig index d13337d..ed2a82b 100644 --- a/dwm.c.orig +++ b/dwm.c.orig @@ -122,6 +122,7 @@ struct Monitor { int by; /* bar geometry */ int mx, my, mw, mh; /* screen size */ int wx, wy, ww, wh; /* window area */ + int gappx; /* gaps between windows */ unsigned int seltags; unsigned int sellt; unsigned int tagset[2]; @@ -218,6 +219,7 @@ static void sendmon(Client *c, Monitor *m); static void setclientstate(Client *c, long state); static void setfocus(Client *c); static void setfullscreen(Client *c, int fullscreen); +static void setgaps(const Arg *arg); static void setlayout(const Arg *arg); static void setmfact(const Arg *arg); static void setup(void); @@ -674,6 +676,7 @@ createmon(void) m->nmaster = nmaster; m->showbar = showbar; m->topbar = topbar; + m->gappx = gappx; m->lt[0] = &layouts[0]; m->lt[1] = &layouts[1 % LENGTH(layouts)]; strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); @@ -1620,6 +1623,16 @@ setfullscreen(Client *c, int fullscreen) } } +void +setgaps(const Arg *arg) +{ + if ((arg->i == 0) || (selmon->gappx + arg->i < 0)) + selmon->gappx = 0; + else + selmon->gappx += arg->i; + arrange(selmon); +} + void setlayout(const Arg *arg) { @@ -1806,16 +1819,16 @@ tile(Monitor *m) if (n > m->nmaster) mw = m->nmaster ? m->ww * m->mfact : 0; else - mw = m->ww; - for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) + mw = m->ww - m->gappx; + for (i = 0, my = ty = m->gappx, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) if (i < m->nmaster) { - h = (m->wh - my) / (MIN(n, m->nmaster) - i); - resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); - my += HEIGHT(c); + h = (m->wh - my) / (MIN(n, m->nmaster) - i) - m->gappx; + resize(c, m->wx + m->gappx, m->wy + my, mw - (2*c->bw) - m->gappx, h - (2*c->bw), 0); + my += HEIGHT(c) + m->gappx; } else { - h = (m->wh - ty) / (n - i); - resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); - ty += HEIGHT(c); + h = (m->wh - ty) / (n - i) - m->gappx; + resize(c, m->wx + mw + m->gappx, m->wy + ty, m->ww - mw - (2*c->bw) - 2*m->gappx, h - (2*c->bw), 0); + ty += HEIGHT(c) + m->gappx; } } diff --git a/dwm.o b/dwm.o index 5f95ce846e0ba38f748a3477a4b6034a841055cc..70174930081af9950e738beac47f4eef37237c84 100644 GIT binary patch delta 23982 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 delta 24273 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 X*5t +#include +#include +#include +#include + +/** + * Magically finds the current's executable path + * + * I'm doing the do{}while(); trick because Linux (what I'm running) is not + * POSIX compilant and so lstat() cannot be trusted on /proc entries + * + * @return char* the path of the current executable + */ +char *get_dwm_path(){ + struct stat s; + int r, length, rate = 42; + char *path = NULL; + + if(lstat("/proc/self/exe", &s) == -1){ + perror("lstat:"); + return NULL; + } + + length = s.st_size + 1 - rate; + + do{ + length+=rate; + + free(path); + path = malloc(sizeof(char) * length); + + if(path == NULL){ + perror("malloc:"); + return NULL; + } + + r = readlink("/proc/self/exe", path, length); + + if(r == -1){ + perror("readlink:"); + return NULL; + } + }while(r >= length); + + path[r] = '\0'; + + return path; +} + +/** + * self-restart + * + * Initially inspired by: Yu-Jie Lin + * https://sites.google.com/site/yjlnotes/notes/dwm + */ +void self_restart(const Arg *arg) { + char *const argv[] = {get_dwm_path(), NULL}; + + if(argv[0] == NULL){ + return; + } + + execv(argv[0], argv); +}