From ee31af9995da8cedcc6e75bdbce279786a476935 Mon Sep 17 00:00:00 2001 From: Remi Akirazar Date: Mon, 24 Nov 2025 06:16:55 -0500 Subject: [PATCH] added patches to test --- config.def.h | 13 ++- drw.o | Bin 0 -> 11720 bytes dwm | Bin 0 -> 68288 bytes dwm.c | 59 +++++++++- dwm.o | Bin 0 -> 60784 bytes dwm_time | Bin 0 -> 20352 bytes patches/dwm-cool_autostart-6.5.diff | 121 ++++++++++++++++++++ patches/dwm-r1615-selfrestart.diff | 100 ++++++++++++++++ patches/dwm-restartsig-20180523-6.2.diff | 139 +++++++++++++++++++++++ selfrestart.c | 65 +++++++++++ util.o | Bin 0 -> 2400 bytes 11 files changed, 494 insertions(+), 3 deletions(-) create mode 100644 drw.o create mode 100755 dwm create mode 100644 dwm.o create mode 100755 dwm_time create mode 100644 patches/dwm-cool_autostart-6.5.diff create mode 100644 patches/dwm-r1615-selfrestart.diff create mode 100644 patches/dwm-restartsig-20180523-6.2.diff create mode 100644 selfrestart.c create mode 100644 util.o diff --git a/config.def.h b/config.def.h index 6c2e7f2..1fa074d 100644 --- a/config.def.h +++ b/config.def.h @@ -5,7 +5,7 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int snap = 32; /* snap pixel */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ -static const char *fonts[] = { "monospace:size=10" }; +static const char *fonts[] = { "JetBrainsMono Nerd Font:size=12" }; static const char dmenufont[] = "monospace:size=10"; static const char col_gray1[] = "#222222"; static const char col_gray2[] = "#444444"; @@ -18,6 +18,12 @@ static const char *colors[][3] = { [SchemeSel] = { col_gray4, col_cyan, col_cyan }, }; +static const char *const autostart[] = { + "st", NULL, + NULL /* terminate */ +}; + + /* tagging */ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; @@ -63,7 +69,9 @@ static const char *rofi[] = {"rofi", "-show", "drun", "-show-emojis", NULL}; static const char *browser[] = {"brave"}; static const char *termcmd[] = { "st", NULL }; static const char *alatty[] = {"alacritty", NULL}; +static const char *fileman[] = {"thunar", NULL}; +#include "selfrestart.c" static const Key keys[] = { /* modifier key function argument */ { MODKEY, XK_p, spawn, {.v = rofi } }, @@ -71,6 +79,7 @@ static const Key keys[] = { { MODKEY|ControlMask, XK_Return, spawn, {.v = alatty } }, { MODKEY, XK_b, togglebar, {0} }, { MODKEY|ShiftMask, XK_b, spawn, {.v = browser } }, + { MODKEY|ShiftMask, XK_f, spawn, {.v = fileman } }, { MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } }, { MODKEY, XK_i, incnmaster, {.i = +1 } }, @@ -100,6 +109,7 @@ static const Key keys[] = { TAGKEYS( XK_7, 6) TAGKEYS( XK_8, 7) TAGKEYS( XK_9, 8) + { MODKEY|Mod1Mask, XK_r, self_restart, {0} }, { MODKEY|ShiftMask, XK_q, quit, {0} }, }; @@ -119,4 +129,3 @@ static const Button buttons[] = { { ClkTagBar, MODKEY, Button1, tag, {0} }, { ClkTagBar, MODKEY, Button3, toggletag, {0} }, }; - diff --git a/drw.o b/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..833480a1f84d9d66b413b1556058478fc62e97ef GIT binary patch literal 11720 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 literal 0 HcmV?d00001 diff --git a/dwm b/dwm new file mode 100755 index 0000000000000000000000000000000000000000..a4df7b5ca1ee141ce5af22a2e24cb872a37513b6 GIT binary patch literal 68288 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 I1fi(;ACg)>@Bjb+ literal 0 HcmV?d00001 diff --git a/dwm.c b/dwm.c index 4f345ee..51de970 100644 --- a/dwm.c +++ b/dwm.c @@ -232,6 +232,7 @@ static int xerror(Display *dpy, XErrorEvent *ee); static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee); static void zoom(const Arg *arg); +static void autostart_exec(void); /* variables */ static const char broken[] = "broken"; @@ -273,6 +274,36 @@ static Window root, wmcheckwin; /* compile-time check if all tags fit into an unsigned int bit array. */ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; +/* dwm will keep pid's of processes from autostart array and kill them at quit */ +static pid_t *autostart_pids; +static size_t autostart_len; + +/* execute command from autostart array */ +static void +autostart_exec() { + const char *const *p; + size_t i = 0; + + /* count entries */ + for (p = autostart; *p; autostart_len++, p++) + while (*++p); + + autostart_pids = malloc(autostart_len * sizeof(pid_t)); + for (p = autostart; *p; i++, p++) { + if ((autostart_pids[i] = fork()) == 0) { + setsid(); + execvp(*p, (char *const *)p); + fprintf(stderr, "dwm: execvp %s\n", *p); + perror(" failed"); + _exit(EXIT_FAILURE); + } + /* skip arguments */ + while (*++p); + } +} + + + /* function implementations */ void applyrules(Client *c) @@ -1257,6 +1288,16 @@ propertynotify(XEvent *e) void quit(const Arg *arg) { + size_t i; + + /* kill child processes */ + for (i = 0; i < autostart_len; i++) { + if (0 < autostart_pids[i]) { + kill(autostart_pids[i], SIGTERM); + waitpid(autostart_pids[i], NULL, 0); + } + } + running = 0; } @@ -1542,6 +1583,7 @@ setup(void) XSetWindowAttributes wa; Atom utf8string; struct sigaction sa; + pid_t pid; /* do not transform children into zombies when they terminate */ sigemptyset(&sa.sa_mask); @@ -1550,7 +1592,21 @@ setup(void) sigaction(SIGCHLD, &sa, NULL); /* clean up any zombies (inherited from .xinitrc etc) immediately */ - while (waitpid(-1, NULL, WNOHANG) > 0); + while (0 < (pid = waitpid(-1, NULL, WNOHANG))) { + pid_t *p, *lim; + + if (!(p = autostart_pids)) + continue; + lim = &p[autostart_len]; + + for (; p < lim; p++) { + if (*p == pid) { + *p = -1; + break; + } + } + + } /* init screen */ screen = DefaultScreen(dpy); @@ -2151,6 +2207,7 @@ main(int argc, char *argv[]) if (!(dpy = XOpenDisplay(NULL))) die("dwm: cannot open display"); checkotherwm(); + autostart_exec(); setup(); #ifdef __OpenBSD__ if (pledge("stdio rpath proc exec", NULL) == -1) diff --git a/dwm.o b/dwm.o new file mode 100644 index 0000000000000000000000000000000000000000..5109bdb0b01f5c78ca2c1318ebde01471f6eb9d4 GIT binary patch literal 60784 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 S4px5K2fD;tQjm|f{{JuglKx%* literal 0 HcmV?d00001 diff --git a/dwm_time b/dwm_time new file mode 100755 index 0000000000000000000000000000000000000000..3f2aaeb46d247ccb0adaf18577e4a82e878123a9 GIT binary patch literal 20352 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 KF%Q7QivI?36tI*4 literal 0 HcmV?d00001 diff --git a/patches/dwm-cool_autostart-6.5.diff b/patches/dwm-cool_autostart-6.5.diff new file mode 100644 index 0000000..22b6ecd --- /dev/null +++ b/patches/dwm-cool_autostart-6.5.diff @@ -0,0 +1,121 @@ +diff --git a/config.def.h b/config.def.h +index 9efa774..aba210d 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -18,6 +18,11 @@ static const char *colors[][3] = { + [SchemeSel] = { col_gray4, col_cyan, col_cyan }, + }; + ++static const char *const autostart[] = { ++ "st", NULL, ++ NULL /* terminate */ ++}; ++ + /* tagging */ + static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +diff --git a/dwm.c b/dwm.c +index f1d86b2..3ce99fc 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -233,6 +233,7 @@ static int xerror(Display *dpy, XErrorEvent *ee); + static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); ++static void autostart_exec(void); + + /* variables */ + static const char broken[] = "broken"; +@@ -274,6 +275,36 @@ static Window root, wmcheckwin; + /* compile-time check if all tags fit into an unsigned int bit array. */ + struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; + ++/* dwm will keep pid's of processes from autostart array and kill them at quit */ ++static pid_t *autostart_pids; ++static size_t autostart_len; ++ ++/* execute command from autostart array */ ++static void ++autostart_exec() { ++ const char *const *p; ++ size_t i = 0; ++ ++ /* count entries */ ++ for (p = autostart; *p; autostart_len++, p++) ++ while (*++p); ++ ++ autostart_pids = malloc(autostart_len * sizeof(pid_t)); ++ for (p = autostart; *p; i++, p++) { ++ if ((autostart_pids[i] = fork()) == 0) { ++ setsid(); ++ execvp(*p, (char *const *)p); ++ fprintf(stderr, "dwm: execvp %s\n", *p); ++ perror(" failed"); ++ _exit(EXIT_FAILURE); ++ } ++ /* skip arguments */ ++ while (*++p); ++ } ++} ++ ++ ++ + /* function implementations */ + void + applyrules(Client *c) +@@ -1258,6 +1289,16 @@ propertynotify(XEvent *e) + void + quit(const Arg *arg) + { ++ size_t i; ++ ++ /* kill child processes */ ++ for (i = 0; i < autostart_len; i++) { ++ if (0 < autostart_pids[i]) { ++ kill(autostart_pids[i], SIGTERM); ++ waitpid(autostart_pids[i], NULL, 0); ++ } ++ } ++ + running = 0; + } + +@@ -1543,6 +1584,7 @@ setup(void) + XSetWindowAttributes wa; + Atom utf8string; + struct sigaction sa; ++ pid_t pid; + + /* do not transform children into zombies when they terminate */ + sigemptyset(&sa.sa_mask); +@@ -1551,7 +1593,21 @@ setup(void) + sigaction(SIGCHLD, &sa, NULL); + + /* clean up any zombies (inherited from .xinitrc etc) immediately */ +- while (waitpid(-1, NULL, WNOHANG) > 0); ++ while (0 < (pid = waitpid(-1, NULL, WNOHANG))) { ++ pid_t *p, *lim; ++ ++ if (!(p = autostart_pids)) ++ continue; ++ lim = &p[autostart_len]; ++ ++ for (; p < lim; p++) { ++ if (*p == pid) { ++ *p = -1; ++ break; ++ } ++ } ++ ++ } + + /* init screen */ + screen = DefaultScreen(dpy); +@@ -2152,6 +2208,7 @@ main(int argc, char *argv[]) + if (!(dpy = XOpenDisplay(NULL))) + die("dwm: cannot open display"); + checkotherwm(); ++ autostart_exec(); + setup(); + #ifdef __OpenBSD__ + if (pledge("stdio rpath proc exec", NULL) == -1) diff --git a/patches/dwm-r1615-selfrestart.diff b/patches/dwm-r1615-selfrestart.diff new file mode 100644 index 0000000..8627003 --- /dev/null +++ b/patches/dwm-r1615-selfrestart.diff @@ -0,0 +1,100 @@ +# HG changeset patch +# User Barbu Paul - Gheorghe +# Date 1354650884 -7200 +# Node ID 6c472a21a5887c5295a331c48c4da188ec2c8413 +# Parent aaab44133a6830c9a00263731d098c01cc1d6fb5 +selfrestart now magically locates the current dwm (no need to hardcode a path) + +diff -r aaab44133a68 -r 6c472a21a588 config.def.h +--- a/config.def.h Tue Dec 04 21:54:44 2012 +0200 ++++ b/config.def.h Tue Dec 04 21:54:44 2012 +0200 +@@ -54,5 +54,7 @@ + static const char *termcmd[] = { "st", NULL }; + static const char *alatty[] = {"alacritty", NULL}; ++#include "selfrestart.c" ++ + static Key keys[] = { + /* modifier key function argument */ + { MODKEY, XK_p, spawn, {.v = rofi } }, +@@ -89,6 +91,7 @@ + TAGKEYS( XK_7, 6) + TAGKEYS( XK_8, 7) + TAGKEYS( XK_9, 8) ++ { MODKEY|ShiftMask, XK_r, self_restart, {0} }, + { MODKEY|ShiftMask, XK_q, quit, {0} }, + }; + +@@ -108,4 +111,3 @@ + { ClkTagBar, MODKEY, Button1, tag, {0} }, + { ClkTagBar, MODKEY, Button3, toggletag, {0} }, + }; +- +diff -r aaab44133a68 -r 6c472a21a588 selfrestart.c +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/selfrestart.c Tue Dec 04 21:54:44 2012 +0200 +@@ -0,0 +1,65 @@ ++#include ++#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); ++} diff --git a/patches/dwm-restartsig-20180523-6.2.diff b/patches/dwm-restartsig-20180523-6.2.diff new file mode 100644 index 0000000..f1f8680 --- /dev/null +++ b/patches/dwm-restartsig-20180523-6.2.diff @@ -0,0 +1,139 @@ +From 2991f37f0aaf44b9f9b11e7893ff0af8eb88f649 Mon Sep 17 00:00:00 2001 +From: Christopher Drelich +Date: Wed, 23 May 2018 22:50:38 -0400 +Subject: [PATCH] Modifies quit to handle restarts and adds SIGHUP and SIGTERM + handlers. + +Modified quit() to restart if it receives arg .i = 1 +MOD+CTRL+SHIFT+Q was added to confid.def.h to do just that. + +Signal handlers were handled for SIGHUP and SIGTERM. +If dwm receives these signals it calls quit() with +arg .i = to 1 or 0, respectively. + +To restart dwm: +MOD+CTRL+SHIFT+Q +or +kill -HUP dwmpid + +To quit dwm cleanly: +MOD+SHIFT+Q +or +kill -TERM dwmpid +--- + config.def.h | 1 + + dwm.1 | 10 ++++++++++ + dwm.c | 22 ++++++++++++++++++++++ + 3 files changed, 33 insertions(+) + +diff --git a/config.def.h b/config.def.h +index a9ac303..e559429 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -94,6 +94,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/dwm.1 b/dwm.1 +index 13b3729..36a331c 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 bb95e26..286eecd 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -205,6 +205,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); +@@ -260,6 +262,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; +@@ -1248,6 +1251,7 @@ propertynotify(XEvent *e) + void + quit(const Arg *arg) + { ++ if(arg->i) restart = 1; + running = 0; + } + +@@ -1536,6 +1540,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); +@@ -1637,6 +1644,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) +@@ -2139,6 +2160,7 @@ main(int argc, char *argv[]) + setup(); + scan(); + run(); ++ if(restart) execvp(argv[0], argv); + cleanup(); + XCloseDisplay(dpy); + return EXIT_SUCCESS; +-- +2.7.4 + diff --git a/selfrestart.c b/selfrestart.c new file mode 100644 index 0000000..d695d48 --- /dev/null +++ b/selfrestart.c @@ -0,0 +1,65 @@ +#include +#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); +} diff --git a/util.o b/util.o new file mode 100644 index 0000000000000000000000000000000000000000..daaf0dadee1541e5d43c32161ab360c453dbed34 GIT binary patch literal 2400 zcmbuA&1(}u6u{p$QLC*<6p@O8Ijq`%uGvCS>IW&Uc9kgg8@;q?y47I5+)Si?pcOx0 zDTV$49z1x{Lk}K22nGc`dGp|@iXeCp)T5}>_h#p{1&-XU{*VRk$INi*&ES#x*RA2c&rw46H) zu`8Y$G>7AQ{e;;(NM;7|( zoBgkU6`kn~YQI<lv_8^079`$n)H|ISIVB0sy-aSYK|WV3R`PuSLjwbS z$?l<}r&39~*XptCWKX)M*S75*tP{nS#74`DAc}}GTaPWF2P%783vRXGyIS!5E%?qBe5eIK(t;mH zPVdF}riTsV1s6s}T+b_4M(_aTM4?iKnixj{mnW)Tp)4k_ z?-gCb9^#4z6VYd)X-_%+smAFn zGJmCU`a+n$Q9NA#t;Qo-{Ji2cZimJ{DITu#Rg3S`;(utI&K}Q)4>Hw{YrI2!XjGqk z9G_5}7@cb7Nwi5Qo*GL=8O(YA!Kz&;iQE`!;RX5vTb^6YS;CzZV2$TQ4y>_S4J@xh z9SXNC8?1b#RC3E0QmzQs!Yg7&P2}v_S8{n~|EH6f zPD?>&N0*H1tXJ#AzEBr7qJ!2j!vRWvpv^}aRtdD{Wb%#FMNX8h*odoeLQ+nL2U0wY zw^d+c#b-nsMlH~YtU+zKdR<`Z80)1!ufvy-kme2 literal 0 HcmV?d00001