mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			167 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef fink
 | |
| 
 | |
| _fink_get_packages_with_cache(){
 | |
|   local cache_policy
 | |
|   zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
 | |
|   if [[ -z "$cache_policy" ]]; then
 | |
|     zstyle ":completion:${curcontext}:" cache-policy _finkpkgs_caching_policy
 | |
|   fi
 | |
| 
 | |
|   typeset -g -a _fink_pkgs
 | |
|   local expl
 | |
| 
 | |
|   if ( (( #_fink_pkgs == 0 )) || _cache_invalid finkpkgs) \
 | |
|        && ! _retrieve_cache finkpkgs; then
 | |
|     _fink_pkgs=(${(f)"$(
 | |
|       command fink list --tab \
 | |
|       | command grep -v '\[virtual package\]' \
 | |
|       | command sed 's/^   / n /' \
 | |
|       | command cut -f1,2
 | |
|     )"})
 | |
|     _store_cache finkpkgs _fink_pkgs
 | |
|   fi
 | |
| 
 | |
|   if (( # > 0 )); then
 | |
|     local i
 | |
|     for i in "$@"; do
 | |
|       case "$i" in
 | |
|         -i) packages+=(${${(M)_fink_pkgs:#?i?*}#*	}) ;;
 | |
|         -o) packages+=(${${(M)_fink_pkgs:#(i)*}#*	}) ;;
 | |
|         -n) packages+=(${${(M)_fink_pkgs:# n *}#*	}) ;;
 | |
|       esac
 | |
|     done
 | |
|   else
 | |
|     packages=(${_fink_pkgs#*	})
 | |
|   fi
 | |
| }
 | |
| 
 | |
| _fink_get_packages_without_cache(){
 | |
|   local expl
 | |
| 
 | |
|   packages=(${(f)"$(
 | |
|     command fink list -t "$@" "$PREFIX" \
 | |
|     | command grep -v '\[virtual package\]' \
 | |
|     | command cut -f2
 | |
|   )"})
 | |
| }
 | |
| 
 | |
| _fink_get_packages(){
 | |
|   # variable packages will be set
 | |
|   if zstyle -t ":completion:${curcontext}:" use-cache; then
 | |
|     _fink_get_packages_with_cache "$@"
 | |
|   else
 | |
|     _fink_get_packages_without_cache "$@"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| _finkpkgs_caching_policy(){
 | |
|   local -a oldp
 | |
|   oldp=( "$1"(Nmw+1) )
 | |
|   (( $#oldp )) ||
 | |
|     [[ /sw/var/cache/apt/pkgcache.bin -nt "$1" ]] ||
 | |
|     [[ /sw/var/lib/dpkg/available -nt "$1" ]]
 | |
| }
 | |
| 
 | |
| _fink(){
 | |
|   local -a _1st_arguments
 | |
|   _1st_arguments=(
 | |
|     'install:install or update packages'
 | |
|     'remove:remove packages'
 | |
|     'purge:remove packages and configuration files'
 | |
|     'update-all:update all installed packages to the latest version'
 | |
|     'list:search package name or conditions and list'
 | |
|     'apropos:search package descriptions or conditions and list'
 | |
|     'describe:display a description of the package'
 | |
|     'fetch:download package source files'
 | |
|     'fetch-all:downloads all package source files'
 | |
|     'fetch-missing:download all missing package source files'
 | |
|     'build:build .deb packages'
 | |
|     'rebuild:rebuild .deb packages'
 | |
|     'reinstall:reinstall packages'
 | |
|     'configure:rerun the fink configuration process'
 | |
|     'selfupdate:upgrade to a new fink release'
 | |
|     'validate:validate files'
 | |
|     'scanpackages:call dpkg-scanpackages'
 | |
|     'checksums:validate the MD5 digest of all tarballs'
 | |
|     'cleanup:removes obsolete package files'
 | |
|   )
 | |
| 
 | |
|   local context state line expl
 | |
|   local -A opt_args
 | |
| 
 | |
|   _arguments \
 | |
|     '(-h --help)'{-h,--help}'[display help text]' \
 | |
|     '(-q --quiet)'{-q,--quiet}'[causes fink to be less verbose]' \
 | |
|     '(-V --version)'{-V,--version}'[display version information]' \
 | |
|     '(-v --verbose)'{-v,--verbose}'[causes fink to be more verbose]' \
 | |
|     '(-y --yes)'{-y,--yes}'[assume default answer for interactive questions]' \
 | |
|     '*:: :->subcmds' && return 0
 | |
| 
 | |
|   if (( CURRENT == 1 )); then
 | |
|     _describe -t commands "fink subcommand" _1st_arguments
 | |
|     return
 | |
|   fi
 | |
| 
 | |
|   local -a packages
 | |
| 
 | |
|   case "$words[1]" in
 | |
|     install|update|enable|activate|use)
 | |
|       _fink_get_packages -n -o
 | |
|       _wanted packages expl 'not installed or outdated fink package' compadd -a packages ;;
 | |
|     remove|disable|deactivate|unuse|delete|purge)
 | |
|       _fink_get_packages -i
 | |
|       _wanted packages expl 'installed package' compadd -a packages ;;
 | |
|     #update-all)
 | |
|     list)
 | |
|       _arguments \
 | |
| 	'(-t --tab)'{-t,--tab}'[outputs list with tabs as field delimiter]' \
 | |
|         '(-i --installed)'{-i,--installed}'[packages currently installed]' \
 | |
|         '(-u --uptodate)'{-u,--uptodate}'[packages up to date]' \
 | |
|         '(-o --outdate)'{-o,--outdated}'[packages newer version is available]' \
 | |
|         '(-n --notinstalled)'{-n,--notinstalled}'[packages not installed]' \
 | |
| 	'(-b --buildonly)'{-b,--buildonly}'[packages Build Only Depends]' \
 | |
| 	'(-s --section)'{-s=,--section=}'[sections]:section name' \
 | |
| 	'(-m --maintainer)'{-m=,--maintainer=}'[maintainer]:maintainer name' \
 | |
| 	--tree='[tree]:tree name' \
 | |
| 	'(-w --width)'{-w=,--width=}'[width of display]:number or "auto"' \
 | |
| 	'(1 : -)'{-h,--help}'[display help text]' \
 | |
| 	'1: :->pkgs' && return 0
 | |
| 
 | |
|         if [[ "$state" == pkgs ]]; then
 | |
|           _fink_get_packages
 | |
|           _wanted packages expl 'package name hint' compadd -a packages
 | |
|         fi ;;
 | |
|     apropos)
 | |
|       _arguments \
 | |
|         '(-t --tab)'{-t,--tab}'[output the list with tabs as field delimiter]' \
 | |
|         '(-w --width)'{-w=,--width=}'[width of display]:number or "auto"' \
 | |
|         '(1 : -)'{-h,--help}'[display help text]' \
 | |
|         '1: :->pkgs' && return 0
 | |
|         
 | |
|         if [[ "$state" == pkgs ]]; then
 | |
|           _fink_get_packages
 | |
|           _wanted packages expl 'package hint' compadd -a packages
 | |
|         fi ;;
 | |
|     describe|desc|description|info)
 | |
|       _fink_get_packages
 | |
|       _wanted packages expl 'package' compadd -a packages ;;
 | |
|     #fetch)
 | |
|     #fetch-all)
 | |
|     fetch-missing)
 | |
|       _arguments \
 | |
|         '(-i --ignore-restrictive)'{-i,--ignore-restrictive}'[do not fetch packages that are "License: Restrictive"]' ;;
 | |
|     #build)
 | |
|     rebuild|reinstall)
 | |
|       _fink_get_packages
 | |
|       _wanted packages expl 'package' compadd -a packages ;;
 | |
|     #configure)
 | |
|     #selfupdate)
 | |
|     validate|check)
 | |
|       _wanted files expl 'finkinfo file' _files -g "*.info(-.)" ;;
 | |
|     #scanpackages)
 | |
|     #checksums)
 | |
|     #cleanup)
 | |
|   esac
 | |
| }
 | |
| 
 | |
| _fink "$@"
 |