diff options
author | Tim Harder <radhermit@gentoo.org> | 2014-11-21 09:02:24 -0500 |
---|---|---|
committer | Tim Harder <radhermit@gentoo.org> | 2014-11-21 09:02:24 -0500 |
commit | 815a24e2de9764022943d24fa81621c185cbab90 (patch) | |
tree | e25e40990caecd1bca3ef97778c192b9b14cb1a1 /src/_gentoolkit | |
parent | add _openrc to widgets to be installed and update snapshot name (diff) | |
download | zsh-completion-815a24e2de9764022943d24fa81621c185cbab90.tar.gz zsh-completion-815a24e2de9764022943d24fa81621c185cbab90.tar.bz2 zsh-completion-815a24e2de9764022943d24fa81621c185cbab90.zip |
move completions into src subdir
Diffstat (limited to 'src/_gentoolkit')
-rw-r--r-- | src/_gentoolkit | 382 |
1 files changed, 382 insertions, 0 deletions
diff --git a/src/_gentoolkit b/src/_gentoolkit new file mode 100644 index 0000000..ef3db9a --- /dev/null +++ b/src/_gentoolkit @@ -0,0 +1,382 @@ +#compdef equery euse eclean eclean-dist eclean-pkg epkginfo genpkgindex glsa-check revdep-rebuild + +# gentoolkit-0.2.4-rc3 +# +# euse (fully done) +# equery (fully done) +# eclean* (fully done) +# epkginfo (fully done) +# genpkgindex (fully done) +# glsa-check (fully done) +# revdep-rebuild (partial) +# eread *nothing todo* + + +# XXX: shouldn't this go to _gentoo_package? +_packages () { + if compset -P '(\\|)(>=|<=|<|>|=)' ; then + _gentoo_packages ${*/(#m)(installed|available)/${MATCH}_versions} + else + _gentoo_packages $* + fi +} + + +_euse () { + local state tmp start_args suboptions_args + start_args=( + {'(--help)-h','(-h)--help'}'[show help]' + {'(--version)-v','(-v)--version'}'[show version]' + {'(--info)-i','(-i)--info'}'[show descriptions for the given useflags]' + {'(--active)-a','(-a)--active'}'[show currently active useflags and their origin]' + {'(--enable)-E','(-E)--enable'}'[enable the given useflags]' + {'(--disable)-D','(-D)--disable'}'[disable the given useflags]' + {'(--prune)-P','(-P)--prune'}'[show version]' + ) + suboptions_args=( + {'(--global)-g','(-g)--global'}'[show only global use flags]' + {'(--local)-l','(-l)--local'}'[show only local use flags]' + ) + if (( CURRENT == 2 ));then + _arguments -s $start_args + elif (( CURRENT == 3 ));then + case "$words[2]" in + -i|--info|-a|--active) + _arguments -s $suboptions_args \ + '*:useflags:_gentoo_packages useflag' && ret=0 + ;; + -E|--enable) + _arguments \ + '*:useflags:_gentoo_packages useflag' && ret=0 + ;; + -D|--disable) + _arguments \ + '*:active useflags:_gentoo_packages active_useflag' && ret=0 + esac + else + _arguments \ + '*:useflag:_gentoo_packages useflag' && ret=0 + fi +} + + +_equery () { + # Based off of X/_xauth. + local state context line expl ret=1 + local tmp cmd start_args common_args + + start_args=( + {'(--nocolor)-C','(-C)--nocolor'}'[turns off colors]' + {'(--quiet)-q','(-q)--quiet'}'[minimal output]' + {'(--help)-h','(-h)--help'}'[show help]' + {'(--version)-V','(-V)--version'}'[show version]' + ) + + common_args=( + '(-i --installed -I --exclude-installed)'{-i,--installed}'[search installed packages]' + '(-I --exclude-installed -i --installed)'{-I,--exclude-installed}'[do not search installed packages]' + '(-p --portage)'{-p,--portage-tree}'[also search in portage tree]' + '(-o --overlay-tree)'{-o,--overlay-tree}'[also search in overlay tree]' + ) + + + _arguments -s $start_args \ + '*::command:->command' && ret=0 + + while [[ -n "$state" ]]; do + tmp="$state" + state= + case "$tmp" in + command) + if (( CURRENT == 1 )); then + state=subcommands + else + cmd="$words[1]" + curcontext="${curcontext%:*:*}:equery-${cmd}:" + case "$cmd" in + belongs|b) + _arguments \ + '(-c --category)'{-c,--category}'[only search in specified category]:category:_gentoo_packages category' \ + '(-e --earlyout)'{-e,--earlyout}'[stop when first match found]' \ + '(-f --full-regex)'{-f,--full-regex}'[supplied query is a full regex]:pattern:' \ + '*:file:_files' && ret=0 + ;; + check|k) + _arguments \ + ':portage:_packages installed' && ret=0 + ;; + depends|d) + _arguments \ + '(-a --all-packages)'{-a,--all-packages}'[search in all available packages (slow)]:all packages:->packages' \ + '(-d --direct -D --indirect)'{-d,--direct}'[search direct dependencies only (default)]' \ + '(-d --direct -D --indirect)'{-D,--indirect}'[search indirect dependencies (VERY slow)]' \ + '*:package:_packages installed' && ret=0 + ;; + depgraph|g) + _arguments \ + '(-U --no-useflags)'{-U,--no-useflags}'[do not show USE flags]' \ + '(-l --linear)'{-l,--linear}'[do not use fancy formatting]' \ + ':package:_packages installed' && ret=0 + ;; + files|f) + _arguments \ + '--timestamp[append timestamp]' \ + '--md5sum[append md5sum]' \ + '--type[prepend file type]' \ + '--filter=[filter output]:filter(s):_values -s , '' dir obj sym dev fifo path conf cmd doc man info' \ + ':installed pkgname:_packages installed' && ret=0 + ;; + meta|m) + _arguments \ + '(-d --description)'{-d,--description}'[show an extended package description]' \ + '(-H --herd)'{-H,--herd}'[show the herd(s) for the package]' \ + '(-k --keywords)'{-k,--keywords}'[show keywords for all matching package versions]' \ + '(-m --maintainer)'{-m,--maintainer}'[show the maintainer(s) for the package]' \ + '(-S --stablreq)'{-S,--stablreq}'[show STABLEREQ arches (ccs) for all matching package versions]' \ + '(-u --useflags)'{-u,--useflags}'[show per-package USE flag descriptions]' \ + '(-U --upstream)'{-U,--upstream}'[show packages upstream information]' \ + '(-x --xml)'{-x,--xml}'[show the plain metadata.xml file]' \ + ':package:_packages available' && ret=0 + ;; + hasuse|h) + _arguments \ + $common_args \ + ':useflag:_gentoo_packages useflag' && ret=0 + ;; + list|l) + _arguments \ + $common_args \ + ': :_guard "^--*" pattern' && ret=0 + ;; + size|s) + _arguments \ + '(-b --bytes)'{-b,--bytes}'[report size in bytes]' \ + ':package:_packages installed' && ret=0 + ;; + which|w) + _arguments \ + ':portage:_packages available' && ret=0 + ;; + uses|u) + _arguments \ + {--all,-a}'[include non-installed packages]' \ + ":portage:_packages installed" && ret=0 + ;; + changes|c) + _arguments \ + '(-l --latest)'{-l,--latest}'[only display latest ChangeLog entry]' \ + '(-f --full)'{-f,--full}'[display full ChangeLog entry]' \ + ':portage:_packages available' && ret=0 + ;; + *) + _message 'command not found' + ;; + esac + fi + ;; + subcommands) + tmp=( + {belongs,b}'[list all packages owning file(s)]' + {check,k}'[check MD5sums and timestamps of package]' + {changes,c}'[shows ChangeLog for specified package]' + {depends,d}'[list all packages depending on specified package]' + {depgraph,g}'[display a dependency tree for package]' + {files,f}'[list files owned by package]' + {hasuse,h}'[list all packages with specified useflag]' + {list,l}'[list all packages matching pattern]' + {size,s}'[print size of files contained in package]' + {uses,u}'[display USE flags for package]' + {which,w}'[print full path to ebuild for package]' + {has,a}'[list all packages matching ENVIRONMENT data stored in /var/db/pkg]' + {keywords,y}'[display keywords for specified PKG]' + {meta,m}'[display metadata about PKG]' + ) + _values 'equery command' $tmp && ret=0 + ;; + esac + done +} + + +_eclean_wrapper () { + local global_opts pkg_opts dist_opts + + global_opts=( + '(-C --nocolor)'{-C,--nocolor}'[turns off colors]' + '(-d,--destructive)'{-d,--destructive}'[only keep the minimum for a reinstallation]' + '(-e,--exclude-file)'{-e,--exclude-file}'[path to the exclusion file]:filename:_files' + '(-i,--interactive)'{-i,--interactive}'[ask confirmation before deletions]' + '(-n,--package-names)'{-n,--package-names}'[protect all versions (when --destructive)]' + '(-p,--pretend)'{-p,--pretend}'[only display what would be cleaned]' + '(-q,--quiet)'{-q,--quiet}'[minimal output]' + '(-t,--time-limit)'{-t,--time-limit}'[don’t delete files modified since <time>]:time:_eclean_time' + '(: -)'{-h,--help}'[show help]' + '(: -)'{-V,--version}'[show version]' + ) + dist_opts=( + '(-s,--size-limit)'{-s,--size-limit}'[do not delete disfiles bigger than <size>]:size:_eclean_size' + '(-f,--fetch-restricted)'{-f,--fetch-restricted}'[protect fetch-restricted files]' + ) + # XXX: If you add options here make sure that it'll work. + # since there isn't any option *right* now, $pkg_opts + # is never used. + pkg_opts=() + + # check which kind of eclean command we run. + case "$words[1]" in + eclean-pkg) + _arguments -s $global_opts $pkg_opts && + return 0 + ;; + eclean-dist) + _arguments -s $global_opts $dist_opts && + return 0 + ;; + eclean) + # eclean. complete only specifics options if an action has been given, + # global_opts and packages|distfiles otherwhise. + if (( $words[(I)(packages)] )); then + # Currently no options so return 0 + #_values "packages options" $pkg_opts && + return 0 + elif (( $words[(I)(distfiles)] )); then + _values "distfiles options" $dist_opts && + return 0 + else + _arguments -s $global_opts + # complete packages|distfiles only if CURRENT-1 don't need an arg + if [[ ! $words[CURRENT-1] =~ -(e|-exclude-file|t|-time-limit|s|-size-limit|h|-help|v|-version) ]]; then + _values 'eclean command' \ + 'packages[clean outdated binary packages]' \ + 'distfiles[clean outdated packages sources files]' && + return 0 + fi + fi + ;; + esac +} +_eclean_time () { + # adapted from _chmod + compset -P '*' + suf=( -S '' ) + _alternative -O suf \ + 'number:number:(0 1 2 3 4 5 6 7 8 9)' \ + 'time_unit:time_unit:((y\:year m\:month w\:week d\:day h\:hour))' && + return 0 +} +_eclean_size () { + # adapted from _chmod + compset -P '*' + suf=( -S '' ) + _alternative -O suf \ + 'number:number:(0 1 2 3 4 5 6 7 8 9)' \ + 'time_unit:time_unit:((G\:gigabytes M\:megabytes K\:kilobytes B\:bytes))' && + return 0 +} + + +_epkginfo () { + if (( CURRENT == 2 )); then + _arguments -s '*:package:_gentoo_packages available' + fi +} + + +_genpkgindex () { + _arguments -s \ + '(: -)'{-h,--help}'[Display help and exit]' \ + '(-h --help -q --quiet -v --verbose)'{-q,--quiet}'[Be quiet]' \ + '(-h --help -q --quiet -v --verbose)'{-v,--verbose}'[Be verbose]' \ + '(-h --help -c --compress)'{-c,--compress}'[Compresses the generated metadata with bzip2]' \ + '(-h --help -P --pkgdir)'{-P,--pkgdir}'[Set the base location of the binary packages (default $PKGDIR)]:file:_files' +} + + +_glsa-check () { + local actions + + actions=(-l --list -d --dump --print -t --test -p --pretend -f --fix -i --inject -h --help -V --version -m --mail) + + _arguments -s \ + "($actions)"{-l,--list}'[list all unapplied GLSA]:glsa_id:_glsa_id' \ + "($actions)"{-d,--dump,--print}'[show all information about the given GLSA]:glsa_id:_glsa_id' \ + "($actions)"{-t,--test}'[test if this system is affected by the given GLSA]:glsa_id:_glsa_id' \ + "($actions)"{-p,--pretend}'[show the necessary commands to apply this GLSA]:glsa_id:_glsa_id' \ + "($actions)"{-f,--fix}'[try to auto-apply this GLSA (experimental)]:glsa_id:_glsa_id' \ + "($actions)"{-i,--inject}'[inject the given GLSA into the checkfile]:glsa_id:_glsa_id' \ + '(-n --nocolor)'{-n,--nocolor}'[disable colors (option)]' \ + '(: -)'{-h,--help}'[Show help message]' \ + '(: -)'{-V,--version}'[some information about this tool]' \ + '(-v --verbose)'{-v,--verbose}'[print more messages (option)]' \ + '(-c --cve)'{-c,--cve}'[show CAN ids in listing mode (option)]' \ + "($actions)"{-m,--mail}'[send a mail with the given GLSAs to the administrator]:glsa_id:_glsa_id' +} +# glsa-list can contain an arbitrary number of GLSA ids, +# filenames containing GLSAs or the special identifiers +# 'all', 'new' and 'affected' +_glsa_id () { +# XXX: we'll avoid displaying GLSA ids, because the ratio use/noise +# will be low. May be we should display only the X previous GLSA, +# or GLSA ids of the X last month. +# +# start to look at /usr/lib/gentoolkit/pym/glsa.py if GLSA_DIR is still +# PORTDIR + "metadata/glsa/" +# and then get the list (it's only xml files in GLSA_DIR, easy!) + + compadd 'all' 'new' 'affected' + _files +} + + +_revdep-rebuild () { + if (( $words[(I)(--)] )); then + # here it's no more revdep-rebuild options, but emerge options that are called + # FIXME: not working yet. need to load the _portage file + _arguments -s '*:portage:_portage --emerge $@' && return 0 + fi + + _arguments -s \ + '(-C --nocolor)'{-C,--nocolor}'[Turn off colored output]' \ + '(-d --debug)'{-d,--debug}'[Print way too much information (uses bash set -xv)]' \ + '(-e --exact)'{-e,--exact}'[Emerge based on exact package version]' \ + '(: -)'{-h,--help}'[Print help]' \ + '(-i --ignore)'{-i,--ignore}'[Ignore temporary files from previous runs]' \ + '(-k --keep-temp)'{-k,--keep-temp}'[Do not delete temporary files on exit]' \ + '(-L --library)'{-L,--library}'[<NAME> Emerge existing packages that use the library with NAME]:file:_files' \ + '(-l --no-ld-path)'{-l,--no-ld-path}'[Do not set LD_LIBRARY_PATH]' \ + '(-o --no-order)'{-o,--no-order}'[Do not check the build order (Saves time, but may cause breakage)]' \ + '(-p --pretend)'{-p,--pretend}'[Do a trial run without actually emerging anything (also passed to emerge command)]' \ + '(-P --no-progress)'{-P,--no-progress}'[Turn off the progress meter]' \ + '(-q --quiet)'{-q,--quiet}'[Be less verbose (also passed to emerge command)]' \ + '(-v --verbose)'{-v,--verbose}'[Be more verbose (also passed to emerge command)]' \ + '(-u --no-util)'{-u,--no-util}'[<UTIL> Do not use features provided by UTIL]:file:_files' + # XXX: does someone really use -u|--no-util option? + # we can check packages installed (like portage-utils etc) to see + # which "UTIL" is avaiable. +} + + +case "$service" in + euse) + _euse "$@" && return 0 + ;; + equery) + _equery "$@" && return 0 + ;; + eclean*) + _eclean_wrapper "$@" && return 0 + ;; + epkginfo) + _epkginfo "$@" && return 0 + ;; + genpkgindex) + _genpkgindex "$@" && return 0 + ;; + glsa-check) + _glsa-check "$@" && return 0 + ;; + revdep-rebuild) + _revdep-rebuild "$@" && return 0 + ;; +esac + |