commit 337e1a30422c49afb6007f57d5b19b5cd0e8bb7f
Author: Gan Ainm <[email protected]>
Date:   Wed Jun 10 11:48:06 2020 +0000

    [dwm][patch][autostart] Update patch (with manpage update)

diff --git 
a/dwm.suckless.org/patches/autostart/dwm-autostart-20200609-cb3f58a.diff 
b/dwm.suckless.org/patches/autostart/dwm-autostart-20200609-cb3f58a.diff
deleted file mode 100644
index 86db1579..00000000
--- a/dwm.suckless.org/patches/autostart/dwm-autostart-20200609-cb3f58a.diff
+++ /dev/null
@@ -1,144 +0,0 @@
-From 63ed18e9ee236bb88426fddee2d311e090aee71d Mon Sep 17 00:00:00 2001
-From: Gan Ainm <[email protected]>
-Date: Tue, 9 Jun 2020 16:03:30 +0000
-Subject: [PATCH] Make autostart patch XDG conformant
-
----
- dwm.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 92 insertions(+)
-
-diff --git a/dwm.c b/dwm.c
-index 4465af1..ac6ed5e 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -29,6 +29,7 @@
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
-+#include <sys/stat.h>
- #include <sys/wait.h>
- #include <X11/cursorfont.h>
- #include <X11/keysym.h>
-@@ -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,91 @@ run(void)
-                       handler[ev.type](&ev); /* call handler */
- }
- 
-+void
-+runautostart(void)
-+{
-+      char *pathpfx;
-+      char *path;
-+      char *xdgdatahome;
-+      char *home;
-+
-+      if ((home = getenv("HOME")) == NULL)
-+              /* this is almost impossible */
-+              return;
-+
-+      /* if $XDG_DATA_HOME is defined, use $XDG_DATA_HOME/dwm,
-+       * otherwise use ~/.local/share/dwm as autostart script directory
-+       */
-+      if ((xdgdatahome = getenv("XDG_DATA_HOME")) != NULL) {
-+              /* space for path segments, separators and nul */
-+              if ((pathpfx = malloc(strlen(xdgdatahome) + strlen(dwmdir) + 
2)) == NULL)
-+                      return;
-+
-+              if (sprintf(pathpfx, "%s/%s", xdgdatahome, dwmdir) <= 0) {
-+                      free(pathpfx);
-+                      return;
-+              }
-+      } else {
-+              /* space for path segments, separators and nul */
-+              if ((pathpfx = malloc(strlen(home) + strlen(localshare) + 
strlen(dwmdir) + 3)) == NULL)
-+                      return;
-+
-+              if (sprintf(pathpfx, "%s/%s/%s", home, localshare, dwmdir) < 0) 
{
-+                      free(pathpfx);
-+                      return;
-+              }
-+      }
-+
-+      /* check if the autostart script directory exists */
-+      struct stat sb;
-+
-+      if (! (stat(pathpfx, &sb) == 0 && S_ISDIR(sb.st_mode))) {
-+              /* the XDG conformant path does not exist or are not directories
-+               * so we try ~/.dwm instead
-+               */
-+              if (realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3) == 
NULL) {
-+                      free(pathpfx);
-+                      return;
-+              }
-+
-+              if (sprintf(pathpfx, "%s/.%s", home, dwmdir) <= 0) {
-+                      free(pathpfx);
-+                      return;
-+              }
-+      }
-+
-+      /* try the blocking script first */
-+      if ((path = malloc(strlen(pathpfx) + strlen(autostartblocksh) + 2)) == 
NULL) {
-+              free(pathpfx);
-+              return;
-+      } else
-+              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 ((path = realloc(path, strlen(pathpfx) + strlen(autostartsh) + 4)) 
== NULL) {
-+              free(pathpfx);
-+              free(path);
-+              return;
-+      } else
-+              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 +2233,7 @@ main(int argc, char *argv[])
-               die("pledge");
- #endif /* __OpenBSD__ */
-       scan();
-+      runautostart();
-       run();
-       cleanup();
-       XCloseDisplay(dpy);
--- 
-2.27.0
-
diff --git 
a/dwm.suckless.org/patches/autostart/dwm-autostart-20200610-cb3f58a.diff 
b/dwm.suckless.org/patches/autostart/dwm-autostart-20200610-cb3f58a.diff
new file mode 100644
index 00000000..5245ace2
--- /dev/null
+++ b/dwm.suckless.org/patches/autostart/dwm-autostart-20200610-cb3f58a.diff
@@ -0,0 +1,177 @@
+From 37e970479dc5d40e57fc0cbfeaa5e39941483237 Mon Sep 17 00:00:00 2001
+From: Gan Ainm <[email protected]>
+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 <string.h>
+ #include <unistd.h>
+ #include <sys/types.h>
++#include <sys/stat.h>
+ #include <sys/wait.h>
+ #include <X11/cursorfont.h>
+ #include <X11/keysym.h>
+@@ -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,81 @@ 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 != '++          /* 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
++               */
++              if (realloc(pathpfx, strlen(home) + strlen(dwmdir) + 3) == 
NULL) {
++                      free(pathpfx);
++                      return;
++              }
++
++              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
+
diff --git a/dwm.suckless.org/patches/autostart/index.md 
b/dwm.suckless.org/patches/autostart/index.md
index 3e2568cb..db295f18 100644
--- a/dwm.suckless.org/patches/autostart/index.md
+++ b/dwm.suckless.org/patches/autostart/index.md
@@ -14,7 +14,7 @@ bad idea to start X-applications here :)
 Download
 --------
 * [dwm-autostart-20161205-bb3bd6f.diff](dwm-autostart-20161205-bb3bd6f.diff)
-* [dwm-autostart-20200609-cb3f58a.diff](dwm-autostart-20200609-cb3f58a.diff)
+* [dwm-autostart-20200610-cb3f58a.diff](dwm-autostart-20200610-cb3f58a.diff)
 
   This patch modifies the dwm autostart feature to conform to the
   [XDG Base Directory 
specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html).


Reply via email to