Changed dmenu_path (fixed race, improved speed, check that $PATH is the same as the last run).
This commit is contained in:
		
							
								
								
									
										33
									
								
								dmenu_path
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								dmenu_path
									
									
									
									
									
								
							@@ -1,25 +1,26 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					#!/bin/sh -f
 | 
				
			||||||
CACHE=$HOME/.dmenu_cache
 | 
					CACHE=$HOME/.dmenu_cache
 | 
				
			||||||
IFS=:
 | 
					IFS=:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qfind() {
 | 
				
			||||||
 | 
						find "$@" 2>/dev/null
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uptodate() {                                                                       
 | 
					uptodate() {                                                                       
 | 
				
			||||||
	test ! -f $CACHE && return 1                                                   
 | 
						test -f $CACHE &&
 | 
				
			||||||
	for dir in $PATH                                                                
 | 
							test "$(echo "$PATH")" = "$(sed 1q "$CACHE")" &&
 | 
				
			||||||
	do                                                                              
 | 
							qfind $PATH -maxdepth 0 -newer $CACHE
 | 
				
			||||||
		test $dir -nt $CACHE && return 1                                           
 | 
					}
 | 
				
			||||||
	done                                                                            
 | 
					 | 
				
			||||||
	return 0                                                                       
 | 
					 | 
				
			||||||
}          
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ! uptodate
 | 
					if ! uptodate
 | 
				
			||||||
then
 | 
					then
 | 
				
			||||||
	for dir in $PATH
 | 
						{
 | 
				
			||||||
	do
 | 
							echo "$PATH"
 | 
				
			||||||
		for file in "$dir"/*
 | 
							qfind $PATH -type f -maxdepth 1 -perm -u+x -o -perm -g+x -o -perm -o+x |
 | 
				
			||||||
		do
 | 
								sed 's,.*/,,' | sort | uniq
 | 
				
			||||||
			test -x "$file" && echo "${file##*/}"
 | 
						} > $CACHE.$pid
 | 
				
			||||||
		done
 | 
						mv $CACHE.$pid $CACHE
 | 
				
			||||||
	done | sort | uniq > $CACHE
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cat $CACHE
 | 
					tail -n +2 $CACHE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user