mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #autoload
 | |
| 
 | |
| # Try to ignore the suffix. A bit like e-o-c-prefix.
 | |
| 
 | |
| [[ _matcher_num -gt 1 || -z "$SUFFIX" ]] && return 1
 | |
| 
 | |
| local comp curcontext="$curcontext" tmp suf="$SUFFIX" \
 | |
|       _completer \
 | |
|       _matcher _c_matcher _matchers _matcher_num
 | |
| integer ind
 | |
| 
 | |
| if ! zstyle -a ":completion:${curcontext}:" completer comp; then
 | |
|   comp=( "${(@)_completers[1,_completer_num-1]}" )
 | |
|   ind=${comp[(I)_prefix(|:*)]}
 | |
|   (( ind )) && comp=("${(@)comp[ind,-1]}")
 | |
| fi
 | |
| 
 | |
| if zstyle -t ":completion:${curcontext}:" add-space; then
 | |
|   ISUFFIX=" $SUFFIX"
 | |
| else
 | |
|   ISUFFIX="$SUFFIX"
 | |
| fi
 | |
| SUFFIX=''
 | |
| 
 | |
| local _completer_num=1
 | |
| 
 | |
| for tmp in "$comp[@]"; do
 | |
|   if [[ "$tmp" = *:-* ]]; then
 | |
|     _completer="${${tmp%:*}[2,-1]//_/-}${tmp#*:}"
 | |
|     tmp="${tmp%:*}"
 | |
|   elif [[ $tmp = *:* ]]; then
 | |
|     _completer="${tmp#*:}"
 | |
|     tmp="${tmp%:*}"
 | |
|   else
 | |
|     _completer="${tmp[2,-1]//_/-}"
 | |
|   fi
 | |
|   curcontext="${curcontext/:[^:]#:/:${_completer}:}"
 | |
| 
 | |
|   zstyle -a ":completion:${curcontext}:" matcher-list _matchers ||
 | |
|       _matchers=( '' )
 | |
| 
 | |
|   _matcher_num=1
 | |
|   _matcher=''
 | |
|   for _c_matcher in "$_matchers[@]"; do
 | |
|     if [[ "$_c_matcher" == +* ]]; then
 | |
|       _matcher="$_matcher $_c_matcher[2,-1]"
 | |
|     else
 | |
|       _matcher="$_c_matcher"
 | |
|     fi
 | |
| 
 | |
|     if [[ "$tmp" != _prefix ]] && "$tmp"; then
 | |
|       [[ compstate[nmatches] -gt 1 ]] && return 0
 | |
|       compadd -U -i "$IPREFIX" -I "$ISUFFIX" - "${compstate[unambiguous]%$suf}x"
 | |
|       compstate[list]=
 | |
|       if [[ -n $compstate[unambiguous] ]]; then
 | |
|         compstate[insert]=unambiguous
 | |
|       else
 | |
|         compstate[insert]=0
 | |
|       fi
 | |
|       return 0
 | |
|     fi
 | |
|     (( _matcher_num++ ))
 | |
|   done
 | |
|   (( _completer_num++ ))
 | |
| done
 | |
| 
 | |
| return 1
 |