diff options
author | Allan McRae <allan@archlinux.org> | 2016-10-09 22:21:45 +1000 |
---|---|---|
committer | Allan McRae <allan@archlinux.org> | 2016-10-10 10:38:05 +1000 |
commit | 2e76c184aac74c4848fa5ee092fe54c9954c4054 (patch) | |
tree | 5dff5536f7a67cf032a0bd8b7e43f4192a96f030 /contrib | |
parent | d590a45795b30a14cdb697754749c85907053570 (diff) |
Move bash/zsh completion out of contrib
Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/Makefile.am | 22 | ||||
-rw-r--r-- | contrib/bash_completion.in | 156 | ||||
-rw-r--r-- | contrib/zsh_completion.in | 723 |
3 files changed, 2 insertions, 899 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 897cd856..73df92ed 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -28,14 +28,9 @@ OURSCRIPTS = \ $(BASHSCRIPTS) \ $(OTHERSCRIPTS) -OURFILES = \ - bash_completion \ - zsh_completion - EXTRA_DIST = \ PKGBUILD.vim \ bacman.sh.in \ - bash_completion.in \ checkupdates.sh.in \ paccache.sh.in \ paclog-pkglist.sh.in \ @@ -46,11 +41,10 @@ EXTRA_DIST = \ rankmirrors.sh.in \ updpkgsums.sh.in \ vimprojects \ - zsh_completion.in \ README # Files that should be removed, but which Automake does not know. -MOSTLYCLEANFILES = $(OURSCRIPTS) $(OURFILES) *.tmp +MOSTLYCLEANFILES = $(OURSCRIPTS) *.tmp if USE_GIT_VERSION GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 --dirty | sed s/^v//') @@ -85,20 +79,9 @@ $(OURFILES): Makefile $(AM_V_at)chmod a-w $@.tmp $(AM_V_at)mv $@.tmp $@ -all-am: $(OURSCRIPTS) $(OURFILES) - -install-data-local: - $(MKDIR_P) $(DESTDIR)$(sysconfdir)/bash_completion.d/ - $(INSTALL_DATA) bash_completion $(DESTDIR)$(sysconfdir)/bash_completion.d/pacman - $(MKDIR_P) $(DESTDIR)$(datarootdir)/zsh/site-functions/ - $(INSTALL_DATA) zsh_completion $(DESTDIR)$(datarootdir)/zsh/site-functions/_pacman - -uninstall-local: - $(RM) $(DESTDIR)$(sysconfdir)/bash_completion.d/pacman - $(RM) $(DESTDIR)$(datarootdir)/zsh/site-functions/_pacman +all-am: $(OURSCRIPTS) bacman: $(srcdir)/bacman.sh.in -bash_completion: $(srcdir)/bash_completion.in checkupdates: $(srcdir)/checkupdates.sh.in paccache: $(srcdir)/paccache.sh.in $(top_srcdir)/scripts/library/parseopts.sh $(top_srcdir)/scripts/library/size_to_human.sh pacdiff: $(srcdir)/pacdiff.sh.in @@ -108,6 +91,5 @@ pacscripts: $(srcdir)/pacscripts.sh.in pacsearch: $(srcdir)/pacsearch.in rankmirrors: $(srcdir)/rankmirrors.sh.in updpkgsums: $(srcdir)/updpkgsums.sh.in -zsh_completion: $(srcdir)/zsh_completion.in # vim:set noet: diff --git a/contrib/bash_completion.in b/contrib/bash_completion.in deleted file mode 100644 index 06963c42..00000000 --- a/contrib/bash_completion.in +++ /dev/null @@ -1,156 +0,0 @@ -# This file is in the public domain. - -_arch_compgen() { - local i r - COMPREPLY=($(compgen -W '$*' -- "$cur")) - for ((i=1; i < ${#COMP_WORDS[@]}-1; i++)); do - for r in ${!COMPREPLY[@]}; do - if [[ ${COMP_WORDS[i]} = ${COMPREPLY[r]} ]]; then - unset 'COMPREPLY[r]'; break - fi - done - done -} - -_arch_ptr2comp() { - local list= x y - for x; do - for y in '0 --' '1 -'; do - eval 'set -- ${'$x'[${y% *}]}' - list+=\ ${@/#/${y#* }} - done - done - _arch_compgen $list -} - -_arch_incomp() { - local r="\s-(-${1#* }\s|\w*${1% *})"; [[ $COMP_LINE =~ $r ]] -} - -_pacman_keyids() { - \pacman-key --list-keys 2>/dev/null | awk ' - $1 == "pub" { - # key id - split($2, a, "/"); print a[2] - } - $1 == "uid" { - # email - if (match($NF, /<[^>]+>/)) - print substr($NF, RSTART + 1, RLENGTH - 2) - }' -} - -_pacman_key() { - local o cur opts prev wantfiles - COMPREPLY=() - _get_comp_words_by_ref cur prev - opts=('add config delete edit-key export finger gpgdir - help import import-trustdb init keyserver list-keys list-sigs - lsign-key nocolor populate recv-keys refresh-keys updatedb - verify version' - 'a d e f h l r u v V') - - # operations for which we want to complete keyids - for o in 'd delete' 'e export' 'f finger' 'l list-keys' 'r recv-keys' \ - 'edit-key' 'list-sigs' 'lsign-key' 'refresh-keys'; do - _arch_incomp "$o" && break - unset o - done - - # options for which we want file completion - wantfiles='-@(c|-config|g|-gpgdir)' - - if [[ $prev = 'pacman-key' || ( $cur = -* && $prev != $wantfiles ) ]]; then - _arch_ptr2comp opts - elif [[ $prev = @(-k|--keyserver) ]]; then - return - elif [[ $prev != $wantfiles && $o ]]; then - COMPREPLY=($(compgen -W '$(_pacman_keyids)' -- "$cur")) - fi - true -} - -_makepkg() { - local cur opts prev - COMPREPLY=() - _get_comp_words_by_ref cur prev - if [[ $cur = -* && ! $prev =~ ^-(-(config|help|key|version)$|\w*[Vhp]) ]]; then - opts=('allsource asdeps check clean cleanbuild config force geninteg help - holdver ignorearch install key log needed noarchive nobuild nocheck - nocolor noconfirm nodeps noextract noprepare noprogressbar nosign - packagelist printsrcinfo repackage rmdeps sign skipchecksums - skipinteg skippgpcheck source syncdeps verifysource version' - 'A C L R S c d e f g h i m o p r s') - _arch_ptr2comp opts - fi - true -} - -_pacman_pkg() { - _arch_compgen "$( - if [[ $2 ]]; then - \pacman -$1 2>/dev/null | \cut -d' ' -f1 | \sort -u - else - \pacman -$1 2>/dev/null - fi - )" -} - -_pacman() { - local common core cur database files prev query remove sync upgrade o - COMPREPLY=() - _get_comp_words_by_ref cur prev - database=('asdeps asexplicit') - files=('list machinereadable owns search refresh regex' 'l o s x y') - query=('changelog check deps explicit file foreign groups info list owns - search unrequired upgrades' 'c e g i k l m o p s t u') - remove=('cascade dbonly nodeps assume-installed nosave print recursive unneeded' 'c n p s u') - sync=('asdeps asexplicit clean dbonly downloadonly force groups ignore ignoregroup - info list needed nodeps assume-installed print refresh recursive search sysupgrade' - 'c g i l p s u w y') - upgrade=('asdeps asexplicit force needed nodeps assume-installed print recursive' 'p') - common=('arch cachedir color config confirm dbpath debug gpgdir help hookdir logfile - noconfirm noprogressbar noscriptlet quiet root verbose' 'b d h q r v') - core=('database files help query remove sync upgrade version' 'D F Q R S U V h') - - for o in 'D database' 'F files' 'Q query' 'R remove' 'S sync' 'U upgrade'; do - _arch_incomp "$o" && break - done - - if [[ $? != 0 ]]; then - _arch_ptr2comp core - elif [[ ! $prev =~ ^-\w*[Vbhr] && - ! $prev = --@(cachedir|color|config|dbpath|help|hookdir|gpgdir|logfile|root|version) ]] - then - [[ $cur = -* ]] && _arch_ptr2comp ${o#* } common || - case ${o% *} in - D|R) - _pacman_pkg Qq;; - F) - _arch_incomp 'l list' && _pacman_pkg Slq; - ;; - Q) - { _arch_incomp 'g groups' && _pacman_pkg Qg sort; } || - { _arch_incomp 'p file' && _pacman_file; } || - _arch_incomp 'o owns' || _arch_incomp 'u upgrades' || - _pacman_pkg Qq;; - S) - { _arch_incomp 'g groups' && _pacman_pkg Sg; } || - { _arch_incomp 'l list' && _pacman_pkg Sl sort; } || - _pacman_pkg Slq;; - U) - _pacman_file;; - esac - fi - true -} - -_pacman_file() { - compopt -o filenames; _filedir 'pkg.tar*' -} - -complete -F _pacman -o default pacman -complete -F _makepkg -o default makepkg -complete -F _pacman_key -o default pacman-key - -# ex:et ts=2 sw=2 ft=sh diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in deleted file mode 100644 index f74fa297..00000000 --- a/contrib/zsh_completion.in +++ /dev/null @@ -1,723 +0,0 @@ -#compdef pacman pacman.static=pacman pacman-key makepkg - -# copy this file to /usr/share/zsh/site-functions/_pacman - -typeset -A opt_args -setopt extendedglob - -# options for passing to _arguments: main pacman commands -_pacman_opts_commands=( - {-D,--database}'[Modify database]' - {-F,--files}'[Query the files database]' - {-Q,--query}'[Query the package database]' - {-R,--remove}'[Remove a package from the system]' - {-S,--sync}'[Synchronize packages]' - {-T,--deptest}'[Check if dependencies are installed]' - {-U,--upgrade}'[Upgrade a package]' - {-V,--version}'[Display version and exit]' - '(-h --help)'{-h,--help}'[Display usage]' -) - -# options for passing to _arguments: options common to all commands -_pacman_opts_common=( - '--arch[Set an alternate architecture]' - {-b,--dbpath}'[Alternate database location]:database_location:_files -/' - '--color[colorize the output]:color options:(always never auto)' - {-h,--help}'[Display syntax for the given operation]' - {-r,--root}'[Set alternate installation root]:installation root:_files -/' - {-v,--verbose}'[Be more verbose]' - '--cachedir[Alternate package cache location]:cache_location:_files -/' - '--config[An alternate configuration file]:config file:_files' - '--confirm[Always ask for confirmation]' - '--debug[Display debug messages]' - '--gpgdir[Set an alternate directory for GnuPG (instead of @sysconfdir@/pacman.d/gnupg)]: :_files -/' - '--hookdir[Set an alternate hook location]: :_files -/' - '--logfile[An alternate log file]:config file:_files' - '--noconfirm[Do not ask for confirmation]' - '--noprogressbar[Do not show a progress bar when downloading files]' - '--noscriptlet[Do not execute the install scriptlet if one exists]' -) - -# options for passing to _arguments: options for --upgrade commands -_pacman_opts_pkgfile=( - '*-d[Skip dependency checks]' - '*--nodeps[Skip dependency checks]' - '*--assume-installed[Add virtual package to satisfy dependencies]' - '--dbonly[Only remove database entry, do not remove files]' - '--force[Overwrite conflicting files]' - '--needed[Do not reinstall up to date packages]' - '--asdeps[mark packages as non-explicitly installed]' - '--asexplicit[mark packages as explicitly installed]' - {-p,--print}'[Only print the targets instead of performing the operation]' - '*--ignore[Ignore a package upgrade]:package: _pacman_completions_all_packages' - '*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups' - '--print-format[Specify how the targets should be printed]' - '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' -) - -# options for passing to _arguments: subactions for --query command -_pacman_opts_query_actions=( - '(-Q --query)'{-Q,--query} - {-g,--groups}'[View all members of a package group]:*:package groups:->query_group' - {-o,--owns}'[Query the package that owns a file]:file:_files' - {-p,--file}'[Package file to query]:*:package file:->query_file' - {-s,--search}'[Search package names and descriptions]:*:search text:->query_search' -) - -# options for passing to _arguments: options for --query and subcommands -_pacman_opts_query_modifiers=( - {-c,--changelog}'[List package changelog]' - {-d,--deps}'[List packages installed as dependencies]' - {-e,--explicit}'[List packages explicitly installed]' - {\*-i,\*--info}'[View package information]' - {\*-k,\*--check}'[Check package files]' - {-l,--list}'[List package contents]' - {-m,--foreign}'[List installed packages not found in sync db(s)]' - {-n,--native}'[List installed packages found in sync db(s)]' - {-q,--quiet}'[Show less information for query and search]' - {-t,--unrequired}'[List packages not required by any package]' - {-u,--upgrades}'[List packages that can be upgraded]' -) - -# options for passing to _arguments: options for --remove command -_pacman_opts_remove=( - {-c,--cascade}'[Remove all dependent packages]' - {-d,--nodeps}'[Skip dependency checks]' - '*--assume-installed[Add virtual package to satisfy dependencies]' - {-n,--nosave}'[Remove protected configuration files]' - {-p,--print}'[Only print the targets instead of performing the operation]' - {\*-s,\*--recursive}'[Remove dependencies not required by other packages]' - {-u,--unneeded}'[Remove unneeded packages]' - '--dbonly[Only remove database entry, do not remove files]' - '--print-format[Specify how the targets should be printed]' - '*:installed package:_pacman_completions_installed_packages' -) - -_pacman_opts_database=( - '--asdeps[mark packages as non-explicitly installed]' - '--asexplicit[mark packages as explicitly installed]' - '*:installed package:_pacman_completions_installed_packages' -) - -_pacman_opts_files=( - {-l,--list}'[List the files owned by the queried package]:package:_pacman_completions_all_packages' - {-o,--owns}'[Query the package that owns]:files:_files' - {-s,--search}'[Search package file names for matching strings]:files:_files' - {-x,--regex}'[Enable searching using regular expressions]:regex:' - {-y,--refresh}'[Download fresh files databases from the server]' - '--machinereadable[Produce machine-readable output]' - {-q,--quiet}'[Show less information for query and search]' -) - -# options for passing to _arguments: options for --sync command -_pacman_opts_sync_actions=( - '(-S --sync)'{-S,--sync} - {\*-c,\*--clean}'[Remove old packages from cache]:\*:clean:->sync_clean' - {-g,--groups}'[View all members of a package group]:*:package groups:->sync_group' - {-s,--search}'[Search package names and descriptions]:*:search text:->sync_search' - '--dbonly[Only remove database entry, do not remove files]' - '--needed[Do not reinstall up to date packages]' - '--recursive[Reinstall all dependencies of target packages]' -) - -# options for passing to _arguments: options for --sync command -_pacman_opts_sync_modifiers=( - {\*-d,\*--nodeps}'[Skip dependency checks]' - '*--assume-installed[Add virtual package to satisfy dependencies]' - {\*-i,\*--info}'[View package information]' - {-l,--list}'[List all packages in a repository]' - {-p,--print}'[Print download URIs for each package to be installed]' - {-q,--quiet}'[Show less information for query and search]' - {\*-u,\*--sysupgrade}'[Upgrade all out-of-date packages]' - {-w,--downloadonly}'[Download packages only]' - {\*-y,\*--refresh}'[Download fresh package databases]' - '*--ignore[Ignore a package upgrade]:package: _pacman_completions_all_packages' - '*--ignoregroup[Ignore a group upgrade]:package group:_pacman_completions_all_groups' - '--asdeps[Install packages as non-explicitly installed]' - '--asexplicit[Install packages as explicitly installed]' - '--force[Overwrite conflicting files]' - '--print-format[Specify how the targets should be printed]' -) - -# handles --help subcommand -_pacman_action_help() { - _arguments -s : \ - "$_pacman_opts_commands[@]" -} - -# handles cases where no subcommand has yet been given -_pacman_action_none() { - _arguments -s : \ - "$_pacman_opts_commands[@]" -} - -# handles --query subcommand -_pacman_action_query() { - local context state line - typeset -A opt_args - - case $state in - query_file) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' - ;; - query_group) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:groups:_pacman_completions_installed_groups' - ;; - query_owner) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:file:_files' - ;; - query_search) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:search text: ' - ;; - *) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_actions[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package:_pacman_completions_installed_packages' - ;; - esac -} - -# handles --remove subcommand -_pacman_action_remove() { - _arguments -s : \ - '(--remove -R)'{-R,--remove} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_remove[@]" -} - -# handles --database subcommand -_pacman_action_database() { - _arguments -s : \ - '(--database -D)'{-D,--database} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_database[@]" -} - -# handles --files subcommand -_pacman_action_files() { - _arguments -s : \ - '(--files -F)'{-F,--files} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_files[@]" -} - -_pacman_action_deptest () { - _arguments -s : \ - '(--deptest)-T' \ - "$_pacman_opts_common[@]" \ - ":packages:_pacman_all_packages" -} - - -# handles --sync subcommand -_pacman_action_sync() { - local context state line - typeset -A opt_args - if (( $+words[(r)--clean] )); then - state=sync_clean - elif (( $+words[(r)--groups] )); then - state=sync_group - elif (( $+words[(r)--search] )); then - state=sync_search - fi - - case $state in - sync_clean) - _arguments -s : \ - {\*-c,\*--clean}'[Remove old packages from cache]' \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" - ;; - sync_group) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '(-g --group)'{-g,--groups} \ - '*:package group:_pacman_completions_all_groups' - ;; - sync_search) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:search text: ' - ;; - *) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_actions[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:package:_pacman_completions_all_packages' - ;; - esac -} - -# handles --upgrade subcommand -_pacman_action_upgrade() { - _arguments -s : \ - '(-U --upgrade)'{-U,--upgrade} \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_pkgfile[@]" -} - -# handles --version subcommand -_pacman_action_version() { - # no further arguments - return 0 -} - -# provides completions for package groups -_pacman_completions_all_groups() { - local -a cmd groups - _pacman_get_command - groups=( $(_call_program groups $cmd[@] -Sg) ) - typeset -U groups - - if [[ ${words[CURRENT-1]} == '--ignoregroup' ]]; then - _sequence compadd -S ',' "$@" -a groups - else - compadd "$@" -a groups - fi -} - -# provides completions for packages available from repositories -# these can be specified as either 'package' or 'repository/package' -_pacman_completions_all_packages() { - local -a seq sep cmd packages repositories packages_long - _pacman_get_command - - if [[ ${words[CURRENT-1]} == '--ignore' ]]; then - seq='_sequence' - sep=(-S ',') - else - seq= - sep=() - fi - - if compset -P1 '*/*'; then - packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) ) - typeset -U packages - ${seq} _wanted repo_packages expl "repository/package" compadd ${sep[@]} ${(@)packages} - else - packages=( $(_call_program packages $cmd[@] -Sql) ) - typeset -U packages - ${seq} _wanted packages expl "packages" compadd ${sep[@]} - "${(@)packages}" - - repositories=(${(o)${${${(M)${(f)"$(<@sysconfdir@/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) - typeset -U repositories - _wanted repo_packages expl "repository/package" compadd -S "/" $repositories - fi -} - -# provides completions for package groups -_pacman_completions_installed_groups() { - local -a cmd groups - _pacman_get_command - groups=(${(o)${(f)"$(_call_program groups $cmd[@] -Qg)"}% *}) - typeset -U groups - compadd "$@" -a groups -} - -# provides completions for installed packages -_pacman_completions_installed_packages() { - local -a cmd packages packages_long - packages_long=(@localstatedir@/lib/pacman/local/*(/)) - packages=( ${${packages_long#@localstatedir@/lib/pacman/local/}%-*-*} ) - compadd "$@" -a packages -} - -_pacman_all_packages() { - _alternative : \ - 'localpkgs:local packages:_pacman_completions_installed_packages' \ - 'repopkgs:repository packages:_pacman_completions_all_packages' -} - -# provides completions for repository names -_pacman_completions_repositories() { - local -a cmd repositories - repositories=(${(o)${${${(M)${(f)"$(<@sysconfdir@/pacman.conf)"}:#\[*}/\[/}/\]/}:#options}) - # Uniq the array - typeset -U repositories - compadd "$@" -a repositories -} - -# builds command for invoking pacman in a _call_program command - extracts -# relevant options already specified (config file, etc) -# $cmd must be declared by calling function -_pacman_get_command() { - # this is mostly nicked from _perforce - cmd=( "pacman" "2>/dev/null") - integer i - for (( i = 2; i < CURRENT - 1; i++ )); do - if [[ ${words[i]} = "--config" || ${words[i]} = "--root" ]]; then - cmd+=( ${words[i,i+1]} ) - fi - done -} - -# main dispatcher -_pacman_zsh_comp() { - local -a args cmds; - local tmp - args=( ${${${(M)words:#-*}#-}:#-*} ) - for tmp in $words; do - cmds+=("${${_pacman_opts_commands[(r)*$tmp\[*]%%\[*}#*\)}") - done - case $args in #$words[2] in - h*) - if (( ${(c)#args} <= 1 && ${(w)#cmds} <= 1 )); then - _pacman_action_help - else - _message "no more arguments" - fi - ;; - *h*) - _message "no more arguments" - ;; - D*) - _pacman_action_database - ;; - F*) - _pacman_action_files - ;; - Q*g*) # ipkg groups - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:groups:_pacman_completions_installed_groups' - ;; - Q*o*) # file - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package file:_files' - ;; - Q*p*) # file *.pkg.tar* - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_query_modifiers[@]" \ - '*:package file:_files -g "*.pkg.tar*~*.sig(.,@)"' - ;; - T*) - _pacman_action_deptest - ;; - Q*) - _pacman_action_query - ;; - R*) - _pacman_action_remove - ;; - S*c*) # no completion - _arguments -s : \ - '(-c --clean)'{\*-c,\*--clean}'[Remove all files from the cache]' \ - "$_pacman_opts_common[@]" - ;; - S*l*) # repos - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:package repo:_pacman_completions_repositories' \ - ;; - S*g*) # pkg groups - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:package group:_pacman_completions_all_groups' - ;; - S*s*) - _arguments -s : \ - "$_pacman_opts_common[@]" \ - "$_pacman_opts_sync_modifiers[@]" \ - '*:search text: ' - ;; - S*) - _pacman_action_sync - ;; - T*) - _arguments -s : \ - '-T' \ - "$_pacman_opts_common[@]" \ - ":packages:_pacman_all_packages" - ;; - U*) - _pacman_action_upgrade - ;; - V*) - _pacman_action_version - ;; - *) - - case ${(M)words:#--*} in - *--help*) - if (( ${(w)#cmds} == 1 )); then - _pacman_action_help - else - return 0; - fi - ;; - *--sync*) - _pacman_action_sync - ;; - *--query*) - _pacman_action_query - ;; - *--remove*) - _pacman_action_remove - ;; - *--deptest*) - _pacman_action_deptest - ;; - *--database*) - _pacman_action_database - ;; - *--files*) - _pacman_action_files - ;; - *--version*) - _pacman_action_version - ;; - *--upgrade*) - _pacman_action_upgrade - ;; - *) - _pacman_action_none - ;; - esac - ;; - esac -} - -_key_shortopts=( - '-h[show help]' - '-a[Add the specified keys (empty for stdin)]: :_files' - '-d[Remove the Specified keyids]:*: :_keys' - '-e[Export the specified or all keyids]:*: :_keys' - '-f[List fingerprint for specified or all keyids]:*: :_keys' - '-l[List the specified or all keys]:*: :_keys' - '-r[Fetch the specified keyids]:*: :_keys' - '-u[Update the trustdb of pacman]' - '-v[Verify the file specified by the signature]: :_files -g "*.sig"' - '-V[Show program version]' -) - -_key_longopts=( - '--help[show help]' - '--add[Add the specified keys (empty for stdin)]: :_files' - '--delete[Remove the Specified keyids]:*: :_keys' - '--export[Export the specified or all keyids]:*: :_keys' - '--finger[List fingerprint for specified or all keyids]:*: :_keys' - '--list-keys[List the specified or all keys]:*: :_keys' - '--recv-keys[Fetch the specified keyids]:*: :_keys' - '--updatedb[Update the trustdb of pacman]' - '--verify[Verify the file specified by the signature]: :_files -g "*.sig"' - '--version[Show program version]' - '--edit-key[Present a menu for key management task on keyids]:*: :_keys' - '--import[Imports pubring.gpg from dir(s)]: :_files -g "*.gpg"' - '--import-tb[Imports ownertrust values from trustdb.gpg in dir(s)]: :_files -g "*.gpg"' - '--init[Ensure the keyring is properly initialized]' - '--list-sigs[List keys and their signatures]:*: :_keys' - '--lsign-key[Locally sign the specified keyid]:*: :_keys' - '--populate[Reload the default keys from the (given) keyrings in '/usr/share/pacman/keyrings']: :_path_files -W /usr/share/pacman/keyrings' - '--refresh-keys[Update specified or all keys from a keyserver]:*: :_keys' -) - -_pacman_key_options=( - '--config[Use an alternate config file (instead of @sysconfdir@/pacman.conf)]: :_files' - '--gpgdir[Set an alternate directory for GnuPG (instead of @sysconfdir@/pacman.d/gnupg)]: :_files -/' - '--keyserver[Specify a keyserver to use if necessary]' -) - -_pacman_key() { - case $words[CURRENT] in - --*) - _arguments -s : \ - "$_pacman_key_options[@]" \ - "$_key_longopts[@]" - ;; - -*) - _arguments -s : \ - "$_pacman_key_options[@]" \ - "$_key_shortopts[@]" \ - "$_key_longopts[@]" - ;; - *) - i=$#; - while [[ $words[$i] != -* ]] && [[ $words[$i] != "pacman-key" ]];do - i=$(($i-1)) - done - case $i in - --*) - _arguments -s : \ - "$_pacman_key_options[@]" \ - "$_key_longopts[@]" - ;; - -*) - _arguments -s : \ - "$_pacman_key_options[@]" \ - "$_key_shortopts[@]" \ - "$_key_longopts[@]" - ;; - *) - return 1 - ;; - esac - ;; - esac -} - -_keys() { - local keylist keys - keylist=$(pacman-key --list-keys 2>/dev/null | awk ' - $1 == "pub" { - # key id - split($2, a, "/"); print a[2] - } - $1 == "uid" { - # email - if (match($NF, /<[^>]+>/)) - print substr($NF, RSTART + 1, RLENGTH - 2) - #this adds support for names as well if that is ever added - } - $1 == "uid" { - for (i=2;i<NF;i++) {printf "%s%s",sep, $i;sep=" "}; printf "\n" - }' |sed -e 's/(.*)//g' -e 's/^\ //g' -e 's/\ *$//g' |uniq - ) - keys=(${(s:/:)${keylist//$'\n'/\/}}) - _describe -t modules 'keys in keyring' keys && return 0 -} - -_makepkg_shortopts=( - '-s[Install missing dependencies with pacman]' - '-i[Install package after successful build]' - '-A[Ignore incomplete arch field in PKGBUILD]' - '-c[Clean up work files after build]' - '-C[Remove $srcdir/ dir before building the package]' - '-d[Skip all dependency checks]' - '-e[Do not extract source files (use existing $srcdir/ dir)]' - '-f[Overwrite existing package]' - '-g[Generate integrity checks for source files]' - '-h[Show help message and exit]' - '-L[Log package build process]' - '-m[Disable colorized output messages]' - '-o[Download and extract files only]' - '-p[Use an alternate build script (instead of 'PKGBUILD')]: :_files' - '-r[Remove installed dependencies after a successful build]' - '-R[Repackage contents of the package without rebuilding]' - '-S[Generate a source-only tarball without downloading sources]' - '-V[Show version information and exit]' -) - -_makepkg_action_none(){ - _arguments \ - "$_makepkg_shortopts[@]" \ - "$_makepkg_longopts[@]" -} -_makepkg_longopts=( - '--ignorearch[Ignore incomplete arch field in PKGBUILD]' - '--clean[Clean up work files after build]' - '--cleanbuild[Remove $srcdir/ dir before building the package]' - '--nodeps[Skip all dependency checks]' - '--noextract[Do not extract source files (use existing $srcdir/ dir)]' - '--force[Overwrite existing package]' - '--geninteg[Generate integrity checks for source files]' - '--help[Show help message and exit]' - '--install[Install package after successful build]' - '--log[Log package build process]' - '--nocolor[Disable colorized output messages]' - '--nobuild[Download and extract files only]' - '--rmdeps[Remove installed dependencies after a successful build]' - '--repackage[Repackage contents of the package without rebuilding]' - '--syncdeps[Install missing dependencies with pacman]' - '--source[Generate a source-only tarball without downloading sources]' - '--version[Show version information and exit]' - '--allsource[Generate a source-only tarball including downloaded source]' - '--check[Run check() function in the PKGBUILD]' - '--config[Use an alternate config file instead of '@sysconfdir@/makepkg.conf']: :_files' - '--holdver[Do not update VCS sources]' - '--key[Specify key to use for gpg signing instead of the default]: :_keys' - '--noarchive[Do not create package archive]' - '--nocheck[Do not run the check() function in the PKGBUILD]' - '--noprepare[Do not run the prepare() function in the PKGBUILD]' - '--nosign[Do not create a signature for the package]' - '--packagelist[Only list packages that would be produced, without PKGEXT]' - '--printsrcinfo[Print the generated SRCINFO and exit]' - '--sign[Sign the resulting package with gpg]' - '--skipchecksums[Do not verify checksums of the source files]' - '--skipinteg[do not perform any verification checks on source files]' - '--skippgpcheck[Do not verify source files with PGP signatures]' - '--noconfirm[Do not ask for confirmation when resolving dependencies]' - '--asdeps[Install packages as non-explicitly installed]' - '--noprogressbar[Do not show a progress bar when downloading files]' - '--needed[Do not reinstall the targets that are already up to date]' - '--verifysource[Download source files (if needed) and perform integrity checks]' -) -_makepkg(){ - case $words[CURRENT] in - -*) - _arguments -s -w : \ - "$_makepkg_shortopts[@]" \ - "$_makepkg_longopts[@]" - ;; - --* ) - _arguments -s \ - "$_makepkg_longopts[@]" - ;; - - ) - _makepkg_action_none - ;; - *) - i=$# - while [[ $words[i] != -* ]] && [[ $words[$i] != "makepkg" ]];do - i=$((i-1)); - done - case $words[$i] in - -*) - _arguments -s -w : \ - "$_makepkg_shortopts[@]" \ - "$_makepkg_longopts[@]" - ;; - --* ) - _arguments -s \ - "$_makepkg_longopts[@]" - ;; - - ) - _makepkg_action_none - ;; - * ) - return 1 - ;; - esac - ;; - esac -} -_pacman_comp() { - case "$service" in - makepkg) - _makepkg "$@" - ;; - pacman-key) - _pacman_key "$@" - ;; - pacman) - _pacman_zsh_comp "$@" - ;; - *) - _message "Error" - ;; - esac -} - -_pacman_comp "$@" |