[pacman-dev] [PATCH 2/4] zsh completion: fix stacked completion

Allan McRae allan at archlinux.org
Sat Mar 9 02:38:44 EST 2013


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 <danielwallace at gtmanfred.com>
> ---
>  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
>  }
>  
> 



More information about the pacman-dev mailing list