summaryrefslogtreecommitdiff
path: root/Completion/Darwin/Command/_fink
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Darwin/Command/_fink')
-rw-r--r--Completion/Darwin/Command/_fink166
1 files changed, 166 insertions, 0 deletions
diff --git a/Completion/Darwin/Command/_fink b/Completion/Darwin/Command/_fink
new file mode 100644
index 000000000..f0ff6834e
--- /dev/null
+++ b/Completion/Darwin/Command/_fink
@@ -0,0 +1,166 @@
+#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(){
+ 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 "$@"