mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #autoload
 | |
| 
 | |
| local name gropt nopt xopt format gname hidden hide match opts tag sort
 | |
| 
 | |
| opts=()
 | |
| 
 | |
| gropt=(-J)
 | |
| xopt=(-X)
 | |
| nopt=()
 | |
| zparseopts -K -D -a nopt 1 2 V=gropt J=gropt x=xopt
 | |
| 
 | |
| 3="${${3##[[:blank:]]#}%%[[:blank:]]#}"
 | |
| [[ -n "$3" ]] && _lastdescr=( "$_lastdescr[@]" "$3" )
 | |
| 
 | |
| zstyle -s ":completion:${curcontext}:$1" group-name gname &&
 | |
|     [[ -z "$gname" ]] && gname="$1"
 | |
| 
 | |
| _setup "$1" "${gname:--default-}"
 | |
| 
 | |
| name="$2"
 | |
| 
 | |
| zstyle -s ":completion:${curcontext}:$1" format format ||
 | |
|     zstyle -s ":completion:${curcontext}:descriptions" format format
 | |
| 
 | |
| if zstyle -s ":completion:${curcontext}:$1" hidden hidden &&
 | |
|    [[ "$hidden" = (all|yes|true|1|on) ]]; then
 | |
|   [[ "$hidden" = all ]] && format=''
 | |
|   opts=(-n)
 | |
| fi
 | |
| zstyle -s ":completion:${curcontext}:$1" matcher match &&
 | |
|     opts=($opts -M "$match")
 | |
| [[ -n "$_matcher" ]] && opts=($opts -M "$_matcher")
 | |
| 
 | |
| # Use sort style, but ignore `menu' value to help _expand.
 | |
| # Also don't override explicit use of -V.
 | |
| if { zstyle -s ":completion:${curcontext}:$1" sort sort ||
 | |
|      zstyle -s ":completion:${curcontext}:" sort sort; } &&
 | |
|     [[ "$gropt" = -J && $sort != menu ]]; then
 | |
|     if [[ "$sort" = (yes|true|1|on) ]]; then
 | |
| 	gropt=(-J)
 | |
|     else
 | |
| 	gropt=(-V)
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if [[ -z "$_comp_no_ignore" ]]; then
 | |
|   zstyle -a ":completion:${curcontext}:$1" ignored-patterns _comp_ignore ||
 | |
|     _comp_ignore=()
 | |
| 
 | |
|   zstyle -s ":completion:${curcontext}:$1" ignore-line hidden &&
 | |
|     case "$hidden" in
 | |
|     true|yes|on|1) _comp_ignore=( "$_comp_ignore[@]" "$words[@]" );;
 | |
|     current)       _comp_ignore=( "$_comp_ignore[@]" "$words[CURRENT]" );;
 | |
|     current-shown) [[ "$compstate[old_list]" = *shown* ]] &&
 | |
|                        _comp_ignore=( "$_comp_ignore[@]" "$words[CURRENT]" );;
 | |
|     other)         _comp_ignore=( "$_comp_ignore[@]"
 | |
|                                   "${(@)words[1,CURRENT-1]}"
 | |
| 				  "${(@)words[CURRENT+1,-1]}" );;
 | |
|     esac
 | |
| 
 | |
|   # Ensure the ignore option is first so we can override it
 | |
|   # for fake-always.
 | |
|   (( $#_comp_ignore )) && opts=( -F _comp_ignore $opts )
 | |
| else
 | |
|   _comp_ignore=()
 | |
| fi
 | |
| 
 | |
| tag="$1"
 | |
| 
 | |
| shift 2
 | |
| if [[ -z "$1" && $# -eq 1 ]]; then
 | |
|   format=
 | |
| elif [[ -n "$format" ]]; then
 | |
|   zformat -f format "$format" "d:$1" "${(@)argv[2,-1]}"
 | |
| fi
 | |
| 
 | |
| if [[ -n "$gname" ]]; then
 | |
|   if [[ -n "$format" ]]; then
 | |
|     set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" "$gname" "$xopt" "$format"
 | |
|   else
 | |
|     set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" "$gname"
 | |
|   fi
 | |
| else
 | |
|   if [[ -n "$format" ]]; then
 | |
|     set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" -default- "$xopt" "$format"
 | |
|   else
 | |
|     set -A "$name" "$opts[@]" "$nopt[@]" "$gropt" -default-
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| if ! (( ${funcstack[2,-1][(I)_description]} )); then
 | |
|   local fakestyle descr
 | |
|   for fakestyle in fake fake-always; do
 | |
|     zstyle -a ":completion:${curcontext}:$tag" $fakestyle match ||
 | |
|     continue
 | |
| 
 | |
|     descr=( "${(@M)match:#*[^\\]:*}" )
 | |
| 
 | |
|     opts=("${(@P)name}")
 | |
|     if [[ $fakestyle = fake-always && $opts[1,2] = "-F _comp_ignore" ]]; then
 | |
|       shift 2 opts
 | |
|     fi
 | |
|     compadd "${(@)opts}" - "${(@)${(@)match:#*[^\\]:*}:s/\\:/:/}"
 | |
|     (( $#descr )) && _describe -t "$tag" '' descr "${(@)opts}"
 | |
|   done
 | |
| fi
 | |
| 
 | |
| return 0
 |