Changed dmenu_path (fixed race, improved speed, check that $PATH is the same as the...
authorKris Maglione <jg@suckless.org>
Wed, 23 May 2007 20:42:51 +0000 (16:42 -0400)
committerKris Maglione <jg@suckless.org>
Wed, 23 May 2007 20:42:51 +0000 (16:42 -0400)
dmenu_path

index cd43748..84e3015 100755 (executable)
@@ -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
+