mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #autoload
 | |
| 
 | |
| # This is intended to be used as a completer function after the normal
 | |
| # completer as in: `compconf completer=_complete:_match'.
 | |
| # It temporarily switches on pattern matching, allowing you to try 
 | |
| # completion on patterns without having to setopt glob_complete.
 | |
| #
 | |
| # Note, however, that this is only really useful if you don't use the
 | |
| # expand-or-complete function because otherwise the pattern will
 | |
| # be expanded using globbing.
 | |
| #
 | |
| # Configuration keys used:
 | |
| #
 | |
| #  match_original
 | |
| #    If this is set to a `only', pattern matching will only be tried
 | |
| #    with the string from the line. If it is set to any other non-empty
 | |
| #    string, the original pattern will be tried first and if that yields
 | |
| #    no completions, matching will be tried again with a `*' inserted
 | |
| #    at the cursor position. If this key is not set or set to an empty
 | |
| #    string, matching will only be attempted with the `*' inserted.
 | |
| #
 | |
| #  match_insert
 | |
| #    If this is set to a string starting with `unambig', menucompletion
 | |
| #    will only be turned on if no unambiguous string could be built
 | |
| #    that is at least as long as the original string.
 | |
| 
 | |
| local tmp opm="$compstate[pattern_match]" ret=0
 | |
| 
 | |
| # Do nothing if we don't have a pattern or there are still global
 | |
| # match specifications to try.
 | |
| 
 | |
| tmp="${${:-$PREFIX$SUFFIX}#[~=]}"
 | |
| [[ "$tmp:q" = "$tmp" ||
 | |
|    compstate[matcher] -ne compstate[total_matchers] ]] && return 1
 | |
| 
 | |
| # Try completion without inserting a `*'?
 | |
| 
 | |
| if [[ -n "$compconfig[match_original]" ]]; then
 | |
|   compstate[matcher]=-1
 | |
|   compstate[pattern_match]='-'
 | |
|   _complete && ret=1
 | |
|   compstate[pattern_match]="$opm"
 | |
|   compstate[matcher]="$compstate[total_matchers]"
 | |
| 
 | |
|   if (( ret )); then
 | |
|     [[ "$compconfig[match_insert]" = unambig* &&
 | |
|        $#compstate[unambiguous] -ge ${#:-${PREFIX}${SUFFIX}} ]] && 
 | |
|         compstate[pattern_insert]=unambiguous
 | |
|     return 0
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| # No completion with inserting `*'?
 | |
| 
 | |
| [[ "$compconfig[match_original]" = only ]] && return 1
 | |
| 
 | |
| compstate[matcher]=-1
 | |
| compstate[pattern_match]='*'
 | |
| _complete && ret=1
 | |
| compstate[pattern_match]="$opm"
 | |
| compstate[matcher]="$compstate[total_matchers]"
 | |
| 
 | |
| [[ ret -eq 1 && "$compconfig[match_insert]" = unambig* &&
 | |
|    $#compstate[unambiguous] -ge ${#:-${PREFIX}${SUFFIX}} ]] && 
 | |
|     compstate[pattern_insert]=unambiguous
 | |
| 
 | |
| return 1-ret
 |