re-applied Neale's spawn patch, credited Neale in LICENSE
This commit is contained in:
		
							
								
								
									
										1
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								LICENSE
									
									
									
									
									
								
							@@ -9,6 +9,7 @@ MIT/X Consortium License
 | 
				
			|||||||
© 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
 | 
					© 2007-2008 Enno Gottox Boland <gottox at s01 dot de>
 | 
				
			||||||
© 2007-2008 Peter Hartlich <sgkkr at hartlich dot com>
 | 
					© 2007-2008 Peter Hartlich <sgkkr at hartlich dot com>
 | 
				
			||||||
© 2008 Martin Hurton <martin dot hurton at gmail dot com>
 | 
					© 2008 Martin Hurton <martin dot hurton at gmail dot com>
 | 
				
			||||||
 | 
					© 2008 Neale Pickett <neale dot woozle dot org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Permission is hereby granted, free of charge, to any person obtaining a
 | 
					Permission is hereby granted, free of charge, to any person obtaining a
 | 
				
			||||||
copy of this software and associated documentation files (the "Software"),
 | 
					copy of this software and associated documentation files (the "Software"),
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								README
									
									
									
									
									
								
							@@ -38,11 +38,12 @@ the DISPLAY environment variable is set correctly, e.g.:
 | 
				
			|||||||
In order to display status info in the bar, you can do something
 | 
					In order to display status info in the bar, you can do something
 | 
				
			||||||
like this in your .xinitrc:
 | 
					like this in your .xinitrc:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dwm &
 | 
				
			||||||
    while true
 | 
					    while true
 | 
				
			||||||
    do
 | 
					    do
 | 
				
			||||||
        xsetroot -name "`date` `uptime | sed 's/.*,//'`"
 | 
					        xsetroot -name "`date` `uptime | sed 's/.*,//'`"
 | 
				
			||||||
        sleep 1
 | 
					        sleep 1
 | 
				
			||||||
    done | dwm
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Configuration
 | 
					Configuration
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# dwm version
 | 
					# dwm version
 | 
				
			||||||
VERSION = 5.3.1
 | 
					VERSION = 5.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Customize below to fit your system
 | 
					# Customize below to fit your system
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								dwm.c
									
									
									
									
									
								
							@@ -178,6 +178,7 @@ static void setlayout(const Arg *arg);
 | 
				
			|||||||
static void setmfact(const Arg *arg);
 | 
					static void setmfact(const Arg *arg);
 | 
				
			||||||
static void setup(void);
 | 
					static void setup(void);
 | 
				
			||||||
static void showhide(Client *c);
 | 
					static void showhide(Client *c);
 | 
				
			||||||
 | 
					static void sigchld(int signal);
 | 
				
			||||||
static void spawn(const Arg *arg);
 | 
					static void spawn(const Arg *arg);
 | 
				
			||||||
static void tag(const Arg *arg);
 | 
					static void tag(const Arg *arg);
 | 
				
			||||||
static int textnw(const char *text, unsigned int len);
 | 
					static int textnw(const char *text, unsigned int len);
 | 
				
			||||||
@@ -1340,22 +1341,24 @@ showhide(Client *c) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					sigchld(int signal) {
 | 
				
			||||||
 | 
						while(0 < waitpid(-1, NULL, WNOHANG));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
spawn(const Arg *arg) {
 | 
					spawn(const Arg *arg) {
 | 
				
			||||||
	/* The double-fork construct avoids zombie processes and keeps the code
 | 
						signal(SIGCHLD, sigchld);
 | 
				
			||||||
	 * clean from stupid signal handlers. */
 | 
					 | 
				
			||||||
	if(fork() == 0) {
 | 
						if(fork() == 0) {
 | 
				
			||||||
		if(fork() == 0) {
 | 
							if(dpy)
 | 
				
			||||||
			if(dpy)
 | 
								close(ConnectionNumber(dpy));
 | 
				
			||||||
				close(ConnectionNumber(dpy));
 | 
							setsid();
 | 
				
			||||||
			setsid();
 | 
							execvp(((char **)arg->v)[0], (char **)arg->v);
 | 
				
			||||||
			execvp(((char **)arg->v)[0], (char **)arg->v);
 | 
							fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
 | 
				
			||||||
			fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
 | 
							perror(" failed");
 | 
				
			||||||
			perror(" failed");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		exit(0);
 | 
							exit(0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	wait(0);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user