|
@@ -0,0 +1,662 @@
|
|
|
+#compdef pacman pacman.static=pacman pacman-key makepkg
|
|
|
+
|
|
|
+typeset -A opt_args
|
|
|
+setopt extendedglob
|
|
|
+
|
|
|
+# options for passing to _arguments: main pacman commands
|
|
|
+_pacman_opts_commands=(
|
|
|
+ {-D,--database}'[Modify 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=(
|
|
|
+ {-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'
|
|
|
+ '--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]'
|
|
|
+ '--print[Only print the targets instead of performing the operation]'
|
|
|
+)
|
|
|
+
|
|
|
+# options for passing to _arguments: options for --upgrade commands
|
|
|
+_pacman_opts_pkgfile=(
|
|
|
+ '*-d[Skip dependency checks]'
|
|
|
+ '*--nodeps[Skip dependency checks]'
|
|
|
+ '--dbonly[Only remove database entry, do not remove files]'
|
|
|
+ '--force[Overwrite conflicting files]'
|
|
|
+ '--needed[Do not reinstall up to date packages]'
|
|
|
+ '*: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)]'
|
|
|
+ {-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]'
|
|
|
+ {-n,--nosave}'[Remove protected configuration files]'
|
|
|
+ {\*-s,\*--recursive}'[Remove dependencies not required by other packages]'
|
|
|
+ '--dbonly[Only remove database entry, do not remove files]'
|
|
|
+ '*: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'
|
|
|
+)
|
|
|
+
|
|
|
+# 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]'
|
|
|
+ {\*-i,\*--info}'[View package information]'
|
|
|
+ {-l,--list}'[List all packages in a repository]'
|
|
|
+ {-p,--print}'[Print download URIs for each package to be installed]'
|
|
|
+ {\*-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]'
|
|
|
+)
|
|
|
+
|
|
|
+# 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[@]"
|
|
|
+}
|
|
|
+
|
|
|
+_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
|
|
|
+ compadd "$@" -a groups
|
|
|
+}
|
|
|
+
|
|
|
+# provides completions for packages available from repositories
|
|
|
+# these can be specified as either 'package' or 'repository/package'
|
|
|
+_pacman_completions_all_packages() {
|
|
|
+ local -a cmd packages repositories packages_long
|
|
|
+ _pacman_get_command
|
|
|
+
|
|
|
+ if compset -P1 '*/*'; then
|
|
|
+ packages=( $(_call_program packages $cmd[@] -Sql ${words[CURRENT]%/*}) )
|
|
|
+ typeset -U packages
|
|
|
+ _wanted repo_packages expl "repository/package" compadd ${(@)packages}
|
|
|
+ else
|
|
|
+ packages=( $(_call_program packages $cmd[@] -Sql) )
|
|
|
+ typeset -U packages
|
|
|
+ _wanted packages expl "packages" compadd - "${(@)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
|
|
|
+ ;;
|
|
|
+ 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
|
|
|
+ ;;
|
|
|
+ *--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 fingreprint for specidied 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 fingreprint for specidied 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]'
|
|
|
+ '-d[Skip all dependency checks]'
|
|
|
+ '-e[Do not extract source files (use existing src/ 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]'
|
|
|
+)
|
|
|
+
|
|
|
+_makepkg_action_none(){
|
|
|
+ _arguments \
|
|
|
+ "$_makepkg_shortopts[@]" \
|
|
|
+ "$_makepkg_longopts[@]"
|
|
|
+}
|
|
|
+_makepkg_longopts=(
|
|
|
+ '--ignorearch[Ignore incomplete arch field in PKGBUILD]'
|
|
|
+ '--clean[Clean up work files after build]'
|
|
|
+ '--nodeps[Skip all dependency checks]'
|
|
|
+ '--noextract[Do not extract source files (use existing src/ 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]'
|
|
|
+ '--allsource[Generate a source-only tarball including downloaded source]'
|
|
|
+ '--asroot[Allow makepkg to run as root user]'
|
|
|
+ '--check[Run check() function in the PKGBUILD]'
|
|
|
+ '--config[Use an alternate config file instead of '@sysconfdir@/makepkg.conf']: :_files'
|
|
|
+ '--holdver[Prevent automatic version bumping for development PKGBUILDs]'
|
|
|
+ '--key[Specify key to use for gpg signing instead of the default]: :_keys'
|
|
|
+ '--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]'
|
|
|
+ '--pkg[Only build listed packages from a split package]'
|
|
|
+ '--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 up-to-date packages]'
|
|
|
+ '--verifysource[Only download sources and verify checksums]'
|
|
|
+)
|
|
|
+_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 "$@"
|
|
|
+ ;;
|
|
|
+ yay)
|
|
|
+ _pacman_zsh_comp "$@"
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ _message "Error"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+}
|
|
|
+
|
|
|
+_pacman_comp "$@"
|