re-applied Neale's spawn patch, credited Neale in LICENSE
This commit is contained in:
		
							parent
							
								
									0b5dcf229f
								
							
						
					
					
						commit
						62a491e36d
					
				
							
								
								
									
										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
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								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,11 +1341,15 @@ 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)); | ||||||
| @ -1352,10 +1357,8 @@ spawn(const Arg *arg) { | |||||||
| 		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 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 a@null
						a@null