[pacman-dev] [PATCHv2] fix zsh stacked commpletion
Allan McRae
allan at archlinux.org
Sat Dec 1 02:15:03 EST 2012
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 at 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:
>
More information about the pacman-dev
mailing list