From c3f2c75d8a47b5f4d3729542833c0996d7b9d15a Mon Sep 17 00:00:00 2001 From: Remi Akirazar Date: Wed, 26 Nov 2025 01:40:35 -0500 Subject: [PATCH] added dwm-autostart patch --- dwm | Bin 0 -> 67728 bytes dwm.1 | 23 +++ dwm.c | 84 +++++++++ patches/dwm-autostart-20210120-cb3f58a.diff | 179 ++++++++++++++++++++ 4 files changed, 286 insertions(+) create mode 100755 dwm create mode 100644 patches/dwm-autostart-20210120-cb3f58a.diff diff --git a/dwm b/dwm new file mode 100755 index 0000000000000000000000000000000000000000..89b618f5447b119696f58db087a3a9ae838bb8c5 GIT binary patch literal 67728 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 literal 0 HcmV?d00001 diff --git a/dwm.1 b/dwm.1 index ddc8321..86e73f9 100644 --- a/dwm.1 +++ b/dwm.1 @@ -30,6 +30,14 @@ 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 @@ -152,6 +160,21 @@ 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. diff --git a/dwm.c b/dwm.c index 4f345ee..bfc9ee8 100644 --- a/dwm.c +++ b/dwm.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -193,6 +194,7 @@ static void resizeclient(Client *c, int x, int y, int w, int h); static void resizemouse(const Arg *arg); static void restack(Monitor *m); static void run(void); +static void runautostart(void); static void scan(void); static int sendevent(Client *c, Atom proto); static void sendmon(Client *c, Monitor *m); @@ -234,7 +236,11 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee); static void zoom(const Arg *arg); /* variables */ +static const char autostartblocksh[] = "autostart_blocking.sh"; +static const char autostartsh[] = "autostart.sh"; static const char broken[] = "broken"; +static const char dwmdir[] = "dwm"; +static const char localshare[] = ".local/share"; static char stext[256]; static int screen; static int sw, sh; /* X display screen geometry width, height */ @@ -1389,6 +1395,83 @@ run(void) handler[ev.type](&ev); /* call handler */ } +void +runautostart(void) +{ + char *pathpfx; + char *path; + char *xdgdatahome; + char *home; + struct stat sb; + + if ((home = getenv("HOME")) == NULL) + /* this is almost impossible */ + return; + + /* if $XDG_DATA_HOME is set and not empty, use $XDG_DATA_HOME/dwm, + * otherwise use ~/.local/share/dwm as autostart script directory + */ + xdgdatahome = getenv("XDG_DATA_HOME"); + if (xdgdatahome != NULL && *xdgdatahome != '\0') { + /* space for path segments, separators and nul */ + pathpfx = ecalloc(1, strlen(xdgdatahome) + strlen(dwmdir) + 2); + + if (sprintf(pathpfx, "%s/%s", xdgdatahome, dwmdir) <= 0) { + free(pathpfx); + return; + } + } else { + /* space for path segments, separators and nul */ + pathpfx = ecalloc(1, strlen(home) + strlen(localshare) + + strlen(dwmdir) + 3); + + if (sprintf(pathpfx, "%s/%s/%s", home, localshare, dwmdir) < 0) { + free(pathpfx); + return; + } + } + + /* check if the autostart script directory exists */ + if (! (stat(pathpfx, &sb) == 0 && S_ISDIR(sb.st_mode))) { + /* the XDG conformant path does not exist or is no directory + * so we try ~/.dwm instead + */ + char *pathpfx_new = realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3); + if(pathpfx_new == NULL) { + free(pathpfx); + return; + } + pathpfx = pathpfx_new; + + if (sprintf(pathpfx, "%s/.%s", home, dwmdir) <= 0) { + free(pathpfx); + return; + } + } + + /* try the blocking script first */ + path = ecalloc(1, strlen(pathpfx) + strlen(autostartblocksh) + 2); + if (sprintf(path, "%s/%s", pathpfx, autostartblocksh) <= 0) { + free(path); + free(pathpfx); + } + + if (access(path, X_OK) == 0) + system(path); + + /* now the non-blocking script */ + if (sprintf(path, "%s/%s", pathpfx, autostartsh) <= 0) { + free(path); + free(pathpfx); + } + + if (access(path, X_OK) == 0) + system(strcat(path, " &")); + + free(pathpfx); + free(path); +} + void scan(void) { @@ -2157,6 +2240,7 @@ main(int argc, char *argv[]) die("pledge"); #endif /* __OpenBSD__ */ scan(); + runautostart(); run(); cleanup(); XCloseDisplay(dpy); diff --git a/patches/dwm-autostart-20210120-cb3f58a.diff b/patches/dwm-autostart-20210120-cb3f58a.diff new file mode 100644 index 0000000..efee676 --- /dev/null +++ b/patches/dwm-autostart-20210120-cb3f58a.diff @@ -0,0 +1,179 @@ +From 37e970479dc5d40e57fc0cbfeaa5e39941483237 Mon Sep 17 00:00:00 2001 +From: Gan Ainm +Date: Wed, 10 Jun 2020 10:59:02 +0000 +Subject: [PATCH] dwm-xdgautostart-6.2.diff + +=================================================================== +--- + dwm.1 | 23 +++++++++++++++++ + dwm.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 105 insertions(+) + +diff --git a/dwm.1 b/dwm.1 +index 13b3729..9533aa6 100644 +--- a/dwm.1 ++++ b/dwm.1 +@@ -30,6 +30,14 @@ 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 +@@ -152,6 +160,21 @@ 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. +diff --git a/dwm.c b/dwm.c +index 4465af1..2156b49 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -193,6 +194,7 @@ static void resizeclient(Client *c, int x, int y, int w, int h); + static void resizemouse(const Arg *arg); + static void restack(Monitor *m); + static void run(void); ++static void runautostart(void); + static void scan(void); + static int sendevent(Client *c, Atom proto); + static void sendmon(Client *c, Monitor *m); +@@ -235,7 +237,11 @@ static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); + + /* variables */ ++static const char autostartblocksh[] = "autostart_blocking.sh"; ++static const char autostartsh[] = "autostart.sh"; + static const char broken[] = "broken"; ++static const char dwmdir[] = "dwm"; ++static const char localshare[] = ".local/share"; + static char stext[256]; + static int screen; + static int sw, sh; /* X display screen geometry width, height */ +@@ -1380,6 +1386,83 @@ run(void) + handler[ev.type](&ev); /* call handler */ + } + ++void ++runautostart(void) ++{ ++ char *pathpfx; ++ char *path; ++ char *xdgdatahome; ++ char *home; ++ struct stat sb; ++ ++ if ((home = getenv("HOME")) == NULL) ++ /* this is almost impossible */ ++ return; ++ ++ /* if $XDG_DATA_HOME is set and not empty, use $XDG_DATA_HOME/dwm, ++ * otherwise use ~/.local/share/dwm as autostart script directory ++ */ ++ xdgdatahome = getenv("XDG_DATA_HOME"); ++ if (xdgdatahome != NULL && *xdgdatahome != '\0') { ++ /* space for path segments, separators and nul */ ++ pathpfx = ecalloc(1, strlen(xdgdatahome) + strlen(dwmdir) + 2); ++ ++ if (sprintf(pathpfx, "%s/%s", xdgdatahome, dwmdir) <= 0) { ++ free(pathpfx); ++ return; ++ } ++ } else { ++ /* space for path segments, separators and nul */ ++ pathpfx = ecalloc(1, strlen(home) + strlen(localshare) ++ + strlen(dwmdir) + 3); ++ ++ if (sprintf(pathpfx, "%s/%s/%s", home, localshare, dwmdir) < 0) { ++ free(pathpfx); ++ return; ++ } ++ } ++ ++ /* check if the autostart script directory exists */ ++ if (! (stat(pathpfx, &sb) == 0 && S_ISDIR(sb.st_mode))) { ++ /* the XDG conformant path does not exist or is no directory ++ * so we try ~/.dwm instead ++ */ ++ char *pathpfx_new = realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3); ++ if(pathpfx_new == NULL) { ++ free(pathpfx); ++ return; ++ } ++ pathpfx = pathpfx_new; ++ ++ if (sprintf(pathpfx, "%s/.%s", home, dwmdir) <= 0) { ++ free(pathpfx); ++ return; ++ } ++ } ++ ++ /* try the blocking script first */ ++ path = ecalloc(1, strlen(pathpfx) + strlen(autostartblocksh) + 2); ++ if (sprintf(path, "%s/%s", pathpfx, autostartblocksh) <= 0) { ++ free(path); ++ free(pathpfx); ++ } ++ ++ if (access(path, X_OK) == 0) ++ system(path); ++ ++ /* now the non-blocking script */ ++ if (sprintf(path, "%s/%s", pathpfx, autostartsh) <= 0) { ++ free(path); ++ free(pathpfx); ++ } ++ ++ if (access(path, X_OK) == 0) ++ system(strcat(path, " &")); ++ ++ free(pathpfx); ++ free(path); ++} ++ + void + scan(void) + { +@@ -2142,6 +2223,7 @@ main(int argc, char *argv[]) + die("pledge"); + #endif /* __OpenBSD__ */ + scan(); ++ runautostart(); + run(); + cleanup(); + XCloseDisplay(dpy); +-- +2.27.0 +