On 30/11/12 12:35, Daniel Wallace wrote:
> Now it doesn't do pacman -Sy<tab> pacman -y
> 
> Signed-off-by: Daniel Wallace <[email protected]>
> ---
> This should be formatted a bit better. Without all the whitespace 
> issues fartherdown in the file

Typo in subject.

I am too lazy to test, and I do not actually know anything about zsh
completion...   but I'd guess this affects "pacman -Rs<tab>" too?


>  contrib/zsh_completion.in | 143 
> +++++++++++++++++++++++++++++++++++++---------
>  1 file changed, 116 insertions(+), 27 deletions(-)
> 
> diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in
> index 84ee93c..fbd7af5 100644
> --- a/contrib/zsh_completion.in
> +++ b/contrib/zsh_completion.in
> @@ -117,11 +117,10 @@ _pacman_action_query() {
>       local context state line
>       typeset -A opt_args
>  
> -#    _arguments -s : \
> -#            "$_pacman_opts_common[@]" \
> -#            "$_pacman_opts_query_actions[@]" \
> -#            "$_pacman_opts_query_modifiers[@]"
> -
> +     _arguments -s : \
> +             "$_pacman_opts_common[@]" \
> +             "$_pacman_opts_query_actions[@]" \
> +             "$_pacman_opts_query_modifiers[@]"
>       case $state in
>               query_file)
>                       _arguments -s : \
> @@ -143,6 +142,7 @@ _pacman_action_query() {
>                               ;;
>               query_search)
>                       _arguments -s : \
> +                             "$_pacman_opts_query_actions[@]" \
>                               "$_pacman_opts_common[@]" \
>                               "$_pacman_opts_query_modifiers[@]" \
>                               '*:search text: '
> @@ -169,10 +169,10 @@ _pacman_action_sync() {
>       local context state line
>       typeset -A opt_args
>  
> -#    _arguments -s : \
> -#            "$_pacman_opts_common[@]" \
> -#            "$_pacman_opts_sync_actions[@]" #\
> -#            #"$_pacman_opts_sync_modifiers[@]"
> +     _arguments -s : \
> +             "$_pacman_opts_common[@]" \
> +             "$_pacman_opts_sync_actions[@]" \
> +             "$_pacman_opts_sync_modifiers[@]"
>  
>       case $state in
>               sync_clean)
> @@ -285,52 +285,139 @@ _pacman_get_command() {
>       done
>  }
>  
> -# main dispatcher
> -_pacman_zsh_comp() {
> -     case $words[2] in
> -             -Q*g*) # ipkg groups
> +_sync_shortopts=(
> +    '-S[sync command]'
> +    '-b[set an alternate database location]:files:_files -/'
> +    '*-c[remove old packages from cache directory (-cc for all)]'
> +    '-d[skip dependency version checks (-dd to skip all checks)]'
> +    '-g[view all members of a package group]'
> +    '*-i[view package information]'
> +    '-l[view a list of packages in a repo]:package 
> repo:_pacman_completions_repositories'
> +    '-p[print the targets instead of performing the operation]'
> +    '-q[show less information for query and search]'
> +    '-r[set an alternate installation root]:files:_files -/'
> +    '-s[search remote repositories for matching strings]:regex:'
> +    '-u[upgrade installed packages (-uu allows downgrade)]'
> +    '-v[be verbose]'
> +    '-w[download packages but do not install/upgrade anything]'
> +    '*-y[download fresh package databases from the server]'
> +)
> +
> +_query_shortopts=(
> +    '-Q[query command]'
> +    '-b[an alternate database location]:files:_files -/'
> +    '-c[view the changelog of a package]'
> +    '-d[list packages installed as dependencies]'
> +    '-e[list packages explicitly installed]'
> +    '-g[view all members of a package 
> group]:groups:_pacman_completions_installed_groups'
> +    '*-i[view package information (-ii for backup files)]'
> +    '-k[check that the files owned by the package(s) are present]'
> +    '-l[list the contents of the queried package]'
> +    '-m[list installed packages not found in sync db(s)]'
> +    '-n[list installed packages only found in sync db(s)]'
> +    '-o[query the package that own <file>]:package file:_files'
> +    '-p[query a package file instead of the database]:package file:_files -g 
> "*.pkg.tar*"'
> +    '-q[show less information for query and search]'
> +    '-r[set an alternate installation root]:directories:_files -/'
> +    '-s[search locally-installed packages for matching strings]:regex:'
> +    '-t[list packages not required by any package]'
> +    '-u[list outdated packages]'
> +    '-v[be verbose]'
> +    )
> +
> +
> +_pacman_maincomp(){
> +     case $1 in
> +             -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   ;;
> +             -Q*b|-Q*r)
> +                     _arguments -s : \
> +                             "$_pacman_opts_common[@]" \
> +                             "$_pacman_opts_query_modifiers[@]" \
> +                             '2:directories:_files -/' \
> +                             '*:query:_pacman_action_query'
> +      ;;
> +             -Q*s)
> +                     _arguments -s : \
> +                             "$_pacman_opts_common[@]" \
> +                             "$_pacman_opts_query_modifiers[@]" \
> +                             '2:regex:'
> +                     ;;
> +             -Q*)
> +                     _pacman_action_query    ;;
> +             -R*)
> +                     _pacman_action_remove   ;;
>               -S*c*) # no completion
>                       return 0
>                       ;;
> -             -S*l*) # repos
> +             -S*l) # repos
>                       _arguments -s : \
>                               "$_pacman_opts_common[@]" \
>                               "$_pacman_opts_sync_modifiers[@]" \
> -                             '*:package 
> repo:_pacman_completions_repositories' \
> +                             '*: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*b|-S*r)
> +                     _arguments -s : \
> +                             "$_pacman_opts_common[@]" \
> +                             "$_pacman_opts_sync_modifiers[@]" \
> +                             '2:directories:_files -/' \
> +                             '*:sync:_pacman_action_sync'
> +                     ;;
> +             -S*s)
> +                     _arguments -s : \
> +                             "$_pacman_opts_common[@]" \
> +                             "$_pacman_opts_sync_modifiers[@]" \
> +                             '2:regex:'
> +                     ;;
> +             -S*)
> +                     _pacman_action_sync     ;;
> +             -U*)
> +                     _pacman_action_upgrade  ;;
> +             -V*)
> +                     _pacman_action_version  ;;
> +             -h*)
> +                     _pacman_action_help     ;;
> +             -  )
> +                     _pacman_action_none     ;;
> +             *  )
> +                     return 1        ;;
>       esac
>  }
> +_pacman_zsh_comp() {
> +    varcur="${(M)#words:#-*}"
> +    if (( varcur == 1 )) && (( CURRENT < 3 )); then
> +        case ${(M)words:#-*} in
> +            -S*) _arguments -w "$_sync_shortopts[@]" ;;
> +            -Q*) _arguments -w "$_query_shortopts[@]" ;;
> +        esac
> +    else
> +        if _pacman_maincomp ${${(M)words:#-*}[-1]} ; then
> +            _pacman_maincomp $words[2]
> +        fi
> +    fi
> +}
>  
>  _key_shortopts=(
>      '-h[show help]' \
> @@ -533,3 +620,5 @@ _pacman_comp() {
>  }
>  
>  _pacman_comp "$@"
> +
> +# vim: set ft=zsh ts=2 sw=2 sts=2 noet:
> 


Reply via email to