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

 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:
-- 
1.8.0.1


Reply via email to