about summary refs log tree commit diff
path: root/dmenu_path
diff options
context:
space:
mode:
authorKris Maglione <jg@suckless.org>2007-05-23 16:42:51 -0400
committerKris Maglione <jg@suckless.org>2007-05-23 16:42:51 -0400
commitc04b688cc0fdfdf28eec8ca0133b7a89065ce499 (patch)
treead6f96636909da79b8fab2b7308d4a5755a3ebe6 /dmenu_path
parentmade dmenu_path the way anydot proposed in response to Jukka (diff)
downloaddmenu-c04b688cc0fdfdf28eec8ca0133b7a89065ce499.tar.gz
dmenu-c04b688cc0fdfdf28eec8ca0133b7a89065ce499.tar.bz2
dmenu-c04b688cc0fdfdf28eec8ca0133b7a89065ce499.zip
Changed dmenu_path (fixed race, improved speed, check that $PATH is the same as the last run).
Diffstat (limited to 'dmenu_path')
-rwxr-xr-xdmenu_path33
1 files changed, 17 insertions, 16 deletions
diff --git a/dmenu_path b/dmenu_path
index cd43748..84e3015 100755
--- a/dmenu_path
+++ b/dmenu_path
@@ -1,25 +1,26 @@
-#!/bin/sh
+#!/bin/sh -f
 CACHE=$HOME/.dmenu_cache
 IFS=:
 
+qfind() {
+	find "$@" 2>/dev/null
+}
+
 uptodate() {                                                                       
-	test ! -f $CACHE && return 1                                                   
-	for dir in $PATH                                                                
-	do                                                                              
-		test $dir -nt $CACHE && return 1                                           
-	done                                                                            
-	return 0                                                                       
-}          
+	test -f $CACHE &&
+		test "$(echo "$PATH")" = "$(sed 1q "$CACHE")" &&
+		qfind $PATH -maxdepth 0 -newer $CACHE
+}
 
 if ! uptodate
 then
-	for dir in $PATH
-	do
-		for file in "$dir"/*
-		do
-			test -x "$file" && echo "${file##*/}"
-		done
-	done | sort | uniq > $CACHE
+	{
+		echo "$PATH"
+		qfind $PATH -type f -maxdepth 1 -perm -u+x -o -perm -g+x -o -perm -o+x |
+			sed 's,.*/,,' | sort | uniq
+	} > $CACHE.$pid
+	mv $CACHE.$pid $CACHE
 fi
 
-cat $CACHE
+tail -n +2 $CACHE
+