mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01: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
 |