Remove autostart patch
This commit is contained in:
		
							parent
							
								
									31672c592c
								
							
						
					
					
						commit
						05a4baef3d
					
				
					 3 changed files with 0 additions and 270 deletions
				
			
		
							
								
								
									
										7
									
								
								dwm.1
									
										
									
									
									
								
							
							
						
						
									
										7
									
								
								dwm.1
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -31,13 +31,6 @@ 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										84
									
								
								dwm.c
									
										
									
									
									
								
							
							
						
						
									
										84
									
								
								dwm.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -29,7 +29,6 @@
 | 
			
		|||
#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>
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +221,6 @@ static void resizemouse(const Arg *arg);
 | 
			
		|||
static void resizerequest(XEvent *e);
 | 
			
		||||
static void restack(Monitor *m);
 | 
			
		||||
static void run(void);
 | 
			
		||||
static void runautostart(void);
 | 
			
		||||
static void scan(void);
 | 
			
		||||
static int sendevent(Window w, Atom proto, int m, long d0, long d1, long d2, long d3, long d4);
 | 
			
		||||
static void sendmon(Client *c, Monitor *m);
 | 
			
		||||
| 
						 | 
				
			
			@ -272,11 +270,7 @@ static void zoom(const Arg *arg);
 | 
			
		|||
 | 
			
		||||
/* variables */
 | 
			
		||||
static Systray *systray = NULL;
 | 
			
		||||
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 */
 | 
			
		||||
| 
						 | 
				
			
			@ -1592,83 +1586,6 @@ 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)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -2685,7 +2602,6 @@ main(int argc, char *argv[])
 | 
			
		|||
		die("pledge");
 | 
			
		||||
#endif /* __OpenBSD__ */
 | 
			
		||||
	scan();
 | 
			
		||||
	runautostart();
 | 
			
		||||
	run();
 | 
			
		||||
	cleanup();
 | 
			
		||||
	XCloseDisplay(dpy);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,179 +0,0 @@
 | 
			
		|||
From 37e970479dc5d40e57fc0cbfeaa5e39941483237 Mon Sep 17 00:00:00 2001
 | 
			
		||||
From: Gan Ainm <gan.ainm.riomhphost@gmail.com>
 | 
			
		||||
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,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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue