mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #autoload
 | |
| 
 | |
| # This widget uses the completion system to double-quote the current word
 | |
| # if it is not already quoted, then attempts to complete normally.  If the
 | |
| # normal completion fails, the quotes are removed again.
 | |
| #
 | |
| # To use it:
 | |
| #   autoload -U quote-and-complete-word
 | |
| #   zle -N quote-and-complete-word
 | |
| #   bindkey '\t' quote-and-complete-word
 | |
| #
 | |
| # BUG: The "undo" mechanism is confused by multiple calls to completion
 | |
| # widgets from the same normal widget.
 | |
| 
 | |
| # Note: It's important that this function's name ends in "complete-word".
 | |
| # The _oldlist completer does nothing unless the widget has that suffix.
 | |
| 
 | |
| quote-and-complete-word () {
 | |
|     setopt localoptions unset noshwordsplit noksharrays
 | |
|     local lbuf=$LBUFFER rbuf=$RBUFFER last=$LASTWIDGET
 | |
|     if [[ $last != $WIDGET ]]
 | |
|     then
 | |
|         local oldcontext=$curcontext
 | |
|         local curcontext="${WIDGET}:${${curcontext:-:::}#*:}"
 | |
|         zle complete-word
 | |
|         curcontext=$oldcontext
 | |
|     fi
 | |
|     zle complete-word
 | |
|     local ret=$?
 | |
|     if [[ _lastcomp[nmatches] -eq 0 && $last != $WIDGET ]]
 | |
|     then
 | |
|         LBUFFER=$lbuf RBUFFER=$rbuf
 | |
|     fi
 | |
|     return ret
 | |
| }
 | |
| 
 | |
| _force_quote () {
 | |
|     [[ -z $compstate[quoting] ]] &&
 | |
|     compstate[to_end]='' &&
 | |
|     compadd -U -S "$SUFFIX" -I "$ISUFFIX"\" -i \""$IPREFIX" "${(Q)PREFIX}"
 | |
| }
 | |
| zstyle ':completion:quote-and-complete-word:*' completer _force_quote
 | |
| 
 | |
| # Handle zsh autoloading conventions
 | |
| 
 | |
| [[ -o kshautoload ]] || quote-and-complete-word "$@"
 |