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 <[email protected]>
> ---
>  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
>  }
>  
> 


Reply via email to