mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-25 17:20:25 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef locate mlocate slocate
 | |
| 
 | |
| # Decide if we are using mlocate or slocate.
 | |
| local ltype basename=${words[1]:t} input
 | |
| # If we can't, use this guess.
 | |
| local best_guess=mlocate
 | |
| 
 | |
| case $basename in
 | |
|   ([ms]locate)
 | |
|   ltype=$basename
 | |
|   ;;
 | |
| 
 | |
|   (locate)
 | |
|   input="$(_call_program locate $words[1] -V 2>&1)"
 | |
|   case $input in
 | |
|     (*mlocate*)
 | |
|     ltype=mlocate
 | |
|     ;;
 | |
| 
 | |
|     (*(#i)secure locate*)
 | |
|     ltype=slocate
 | |
|     ;;
 | |
| 
 | |
|     (*(#i)gnu locate*|*findutils*gnu*)
 | |
|     ltype=gnu
 | |
|     ;;
 | |
| 
 | |
|     (*illegal option*)
 | |
|     if [[ $OSTYPE == (freebsd|openbsd|dragonfly|darwin)* ]]; then
 | |
|       ltype=bsd
 | |
|     else
 | |
|       ltype=$best_guess
 | |
|     fi
 | |
|     ;;
 | |
| 
 | |
|     # guess
 | |
|     (*)
 | |
|     ltype=$best_guess
 | |
|     ;;
 | |
|   esac
 | |
|   ;;
 | |
| 
 | |
|   (*)
 | |
|   # too dangerous to run: guess
 | |
|   ltype=$best_guess
 | |
| esac
 | |
| 
 | |
| case $ltype in
 | |
|   (mlocate)
 | |
|   # actually, -d can take a colon-separate list
 | |
|   # -r/--regexp mean no normal arguments, so shouldn't complete
 | |
|   # -m and --mmap are ignored, so don't bother
 | |
|   # -s and --stdio likewise
 | |
|   _arguments -s -S : \
 | |
|     {-b,--basename}'[match only the basename of files in the database]' \
 | |
|     {-c,--count}'[output the number of matching entries]' \
 | |
|     {-d,--database=}'[use alternative database]:database:_files' \
 | |
|     {-e,--existing}'[restrict display to existing files]' \
 | |
|     {-L,--follow}'[follow symbolic links to find existing files (default)]' \
 | |
|     {-h,--help}'[show help]' \
 | |
|     {-i,--ignore-case}'[ignore case distinctions in patterns]' \
 | |
|     {-l,-n,--limit=}'[limit search results]:file limit: ' \
 | |
|     {-P,-H,--nofollow}'[don'\''t follow symbolic links]' \
 | |
|     {-0,--null}'[output separated by NUL characters]' \
 | |
|     {-S,--statistics}'[show database statistics]' \
 | |
|     {-q,--quiet}'[don'\''t report errors]' \
 | |
|     {-r,--regexp=}'[search for given basic regexp]:basic regexp: ' \
 | |
|     --regex'[patterns are extended regexps]' \
 | |
|     {-V,--version}'[show version]' \
 | |
|     {-w,--wholename}'[match entire file path (default)]' \
 | |
|     '*:pattern: '
 | |
|   ;;
 | |
| 
 | |
|   (slocate)
 | |
|   # -d can take path
 | |
|   # -e can take a comma-separated list of directories.
 | |
|   # -f should complete list of file system types like mount
 | |
|   _arguments -s -S : \
 | |
|     -u'[create slocate database starting at path /]' \
 | |
|     -U'[create slocate database starting at given path]:directory:_files -/' \
 | |
|     -c'[parse GNU locate updatedb with -u, -U]' \
 | |
|     -e'[exclude directories with -u, -U]:directories:_files -/' \
 | |
|     -f'[exclude file system types from db with -u, -U]:file system:_file_systems' \
 | |
|     -l'[security level]:level:(0 1)' \
 | |
|     -q'[quiet mode]' \
 | |
|     -n'[limit search results]:file limit: ' \
 | |
|     -i'[case insensitive search]' \
 | |
|     {-r,--regexp=}'[use basic regular expression]:regexp: ' \
 | |
|     {-o,--output=}'[specify database to create]:database:_files' \
 | |
|     {-d,--database=}'[specify database to search]:database:_files' \
 | |
|     {-h,--help}'[display help]' \
 | |
|     {-v,--verbose}'[display files when creating database]' \
 | |
|     {-V,--version}'[display version]' \
 | |
|     '*:pattern: '
 | |
|   ;;
 | |
| 
 | |
|   (gnu)
 | |
|   _arguments -s : \
 | |
|     {-d,--database=}'[use alternative database]:database:_files' \
 | |
|     {-e,--existing}'[restrict display to existing files]' \
 | |
|     {-E,--non-existing}'[allow display of nonexistent files (default)]' \
 | |
|     {-i,--ignore-case}'[ignore case distinctions in patterns]' \
 | |
|     {-w,--wholename}'[match entire file path (default)]' \
 | |
|     {-b,--basename}'[match only the basename of files in the database]' \
 | |
|     {-l,-n,--limit=}'[limit search results]:file limit: ' \
 | |
|     {-S,--statistics}'[show database statistics]' \
 | |
|     {-0,--null}'[output separated by NUL characters]' \
 | |
|     {-c,--count}'[output the number of matching entries]' \
 | |
|     {-P,-H,--nofollow}'[don'\''t follow symbolic links]' \
 | |
|     {-L,--follow}'[follow symbolic links to find existing files (default)]' \
 | |
|     {-A,-all}'[match all arguments instead of at least one]' \
 | |
|     {-p,--print}'[include search results with statistics or count]' \
 | |
|     {-r,--regex=}'[patterns are regular expressions]:basic regexp: ' \
 | |
|     --regextype='[select type of regular expression]' \
 | |
|     {-V,--version}'[show version]' \
 | |
|     --help'[show help]' \
 | |
|     '*:pattern: '
 | |
|   ;;
 | |
| 
 | |
|   (bsd)
 | |
|   _arguments -s -S -A '-*' \
 | |
|     '(-S)-0[separate file names by NUL characters]' \
 | |
|     '(- *)-S[show database statistics and exit]' \
 | |
|     '(-S)-c[output the number of matching file names]' \
 | |
|     '(-S)*-d[specify database to search]:database:_files' \
 | |
|     '(-S)-i[ignore case distinctions in pattern and database]' \
 | |
|     '(-S)-l[limit output to specified number of file names]:file limit: ' \
 | |
|     '(-S)-m[use mmap(2) instead of stdio(3) (default)]' \
 | |
|     '(-S)-s[use stdio(3) instead of mmap(2)]' \
 | |
|     '*:pattern: '
 | |
|   ;;
 | |
| esac
 |