[pacman-dev] [PATCHv2] fix zsh stacked commpletion
Now it doesn't do pacman -Sy<tab> pacman -y Signed-off-by: Daniel Wallace <danielwallace@gtmanfred.com> --- 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
On 30/11/12 12:35, Daniel Wallace wrote:
Now it doesn't do pacman -Sy<tab> pacman -y
Signed-off-by: Daniel Wallace <danielwallace@gtmanfred.com> --- 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:
participants (2)
-
Allan McRae
-
Daniel Wallace