[pacman-dev] [PATCH 2/4] zsh completion: fix stacked completion
Allan McRae
allan at archlinux.org
Sat Mar 9 02:38:44 EST 2013
On 07/03/13 07:13, Daniel Wallace wrote:
> Before this, if you do pacman -Sy<tab> it completes to -y. Now, with -S
> and the other operations in the actual option _arguments, it won't
> remove the operations.
>
> Signed-off-by: Daniel Wallace <danielwallace at gtmanfred.com>
> ---
> contrib/zsh_completion.in | 66 ++++++++++++++++++++++++++++-------------------
> 1 file changed, 39 insertions(+), 27 deletions(-)
>
> diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in
> index a40192c..a92b96a 100644
> --- a/contrib/zsh_completion.in
> +++ b/contrib/zsh_completion.in
> @@ -43,6 +43,7 @@ _pacman_opts_pkgfile=(
>
> # options for passing to _arguments: subactions for --query command
> _pacman_opts_query_actions=(
> + '-Q'
> '-g[View all members of a package group]:*:package groups:->query_group'
> '-o[Query the package that owns a file]:file:_files'
> '-p[Package file to query]:*:package file:->query_file'
> @@ -59,6 +60,7 @@ _pacman_opts_query_modifiers=(
> '-k[Check package files]'
> '-l[List package contents]'
> '-m[List installed packages not found in sync db(s)]'
> + '-n[List installed packages found in sync db(s)]'
Indenting...
> '-t[List packages not required by any package]'
> '-u[List packages that can be upgraded]'
> )
> @@ -80,6 +82,7 @@ _pacman_opts_database=(
>
> # options for passing to _arguments: options for --sync command
> _pacman_opts_sync_actions=(
> + '-S'
> '*-c[Remove old packages from cache]:*:clean:->sync_clean'
> '*-cc[Remove all packages from cache]:*:clean:->sync_clean'
> '-g[View all members of a package group]:*:package groups:->sync_group'
> @@ -124,11 +127,6 @@ _pacman_action_query() {
> local context state line
> typeset -A opt_args
>
> -# _arguments -s : \
> -# "$_pacman_opts_common[@]" \
> -# "$_pacman_opts_query_actions[@]" \
> -# "$_pacman_opts_query_modifiers[@]"
> -
> case $state in
> query_file)
> _arguments -s : \
> @@ -167,6 +165,7 @@ _pacman_action_query() {
> # handles --remove subcommand
> _pacman_action_remove() {
> _arguments -s : \
> + '-R' \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_remove[@]"
> }
> @@ -186,11 +185,6 @@ _pacman_action_sync() {
> local context state line
> typeset -A opt_args
>
> -# _arguments -s : \
> -# "$_pacman_opts_common[@]" \
> -# "$_pacman_opts_sync_actions[@]" #\
> -# #"$_pacman_opts_sync_modifiers[@]"
> -
> case $state in
> sync_clean)
> _arguments -s : \
> @@ -213,6 +207,7 @@ _pacman_action_sync() {
> *)
> _arguments -s : \
> "$_pacman_opts_common[@]" \
> + "$_pacman_opts_sync_actions[@]" \
> "$_pacman_opts_sync_modifiers[@]" \
> '*:package:_pacman_completions_all_packages'
> ;;
> @@ -222,6 +217,7 @@ _pacman_action_sync() {
> # handles --upgrade subcommand
> _pacman_action_upgrade() {
> _arguments -s : \
> + '-U' \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_pkgfile[@]"
> }
> @@ -279,6 +275,12 @@ _pacman_completions_installed_packages() {
> 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
> @@ -304,55 +306,65 @@ _pacman_get_command() {
>
> # main dispatcher
> _pacman_zsh_comp() {
> - case $words[2] in
> - -Q*g*) # ipkg groups
> + local -a args;
> + args=( ${${${(M)words:#-*}#-}:#-*} )
> + case $args in #$words[2] in
> + h*)
> + if (( ${(c)#args} <= 1 )); then
> + _pacman_action_help
> + else
> + _message "no more arguments"
> + fi
> + ;;
> + *h*)
> + _message "no more arguments"
> + ;;
> + Q*g*) # ipkg groups
> _arguments -s : \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_query_modifiers[@]" \
> '*:groups:_pacman_completions_installed_groups'
> ;;
> - -Q*o*) # file
> + Q*o*) # file
> _arguments -s : \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_query_modifiers[@]" \
> '*:package file:_files'
> ;;
> - -Q*p*) # file *.pkg.tar*
> + Q*p*) # file *.pkg.tar*
> _arguments -s : \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_query_modifiers[@]" \
> '*:package file:_files -g "*.pkg.tar*"'
> ;;
> - -Q*) _pacman_action_query ;;
> - -R*) _pacman_action_remove ;;
> - -S*c*) # no completion
> - -T*)
> + T*)
> _arguments -s : \
> '-T' \
> "$_pacman_opts_common[@]" \
> ":packages:_pacman_all_packages"
> ;;
> - -D*) _pacman_action_database ;;
> + Q*) _pacman_action_query ;;
> + R*) _pacman_action_remove ;;
> + D*) _pacman_action_database ;;
> + S*c*) # no completion
> return 0
> ;;
And it seems you recovered from the error in the last patch... Fix it
in first patch to reduce churn.
> - -S*l*) # repos
> + S*l*) # repos
> _arguments -s : \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_sync_modifiers[@]" \
> '*:package repo:_pacman_completions_repositories' \
> ;;
> - -S*g*) # pkg groups
> + S*g*) # pkg groups
> _arguments -s : \
> "$_pacman_opts_common[@]" \
> "$_pacman_opts_sync_modifiers[@]" \
> '*:package group:_pacman_completions_all_groups'
> ;;
> - -S*) _pacman_action_sync ;;
> - -U*) _pacman_action_upgrade ;;
> - -V*) _pacman_action_version ;;
> - -h*) _pacman_action_help ;;
> - - ) _pacman_action_none ;;
> - * ) return 1 ;;
> + S*) _pacman_action_sync ;;
> + U*) _pacman_action_upgrade ;;
> + V*) _pacman_action_version ;;
> + * ) _pacman_action_none ;;
> esac
> }
>
>
More information about the pacman-dev
mailing list