commit
						cbf0e24b18
					
				|  | @ -1,5 +1,10 @@ | ||||||
| # Changelog | # Changelog | ||||||
| 
 | 
 | ||||||
|  | ## v0.5.1 | ||||||
|  | - Speed up widget rebinding (#413) | ||||||
|  | - Clean up global variable creations (#403) | ||||||
|  | - Respect user's set options when running original widget (#402) | ||||||
|  | 
 | ||||||
| ## v0.5.0 | ## v0.5.0 | ||||||
| - Don't overwrite config with default values (#335) | - Don't overwrite config with default values (#335) | ||||||
| - Support fallback strategies by supplying array to suggestion config var | - Support fallback strategies by supplying array to suggestion config var | ||||||
|  |  | ||||||
|  | @ -0,0 +1,14 @@ | ||||||
|  | describe 'with `AUTO_CD` option set' do | ||||||
|  |   let(:after_sourcing) do | ||||||
|  |     -> { | ||||||
|  |       session.run_command('setopt AUTO_CD') | ||||||
|  |       session.run_command('autoload compinit && compinit') | ||||||
|  |     } | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   it 'directory names are still completed' do | ||||||
|  |     session.send_string('sr') | ||||||
|  |     session.send_keys('C-i') | ||||||
|  |     wait_for { session.content }.to eq('src/') | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | describe 'with `GLOB_SUBST` option set' do | ||||||
|  |   let(:after_sourcing) do | ||||||
|  |     -> { | ||||||
|  |       session.run_command('setopt GLOB_SUBST') | ||||||
|  |     } | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   it 'error messages are not printed' do | ||||||
|  |     session.send_string('[[') | ||||||
|  |     wait_for { session.content }.to eq('[[') | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| require 'strategies/special_characters_helper' | require 'strategies/special_characters_helper' | ||||||
| 
 | 
 | ||||||
| describe 'the match_prev_cmd strategy' do | describe 'the `match_prev_cmd` strategy' do | ||||||
|   let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd'] } |   let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd'] } | ||||||
| 
 | 
 | ||||||
|   it 'suggests the last matching history entry after the previous command' do |   it 'suggests the last matching history entry after the previous command' do | ||||||
|  |  | ||||||
							
								
								
									
										29
									
								
								src/bind.zsh
								
								
								
								
							
							
						
						
									
										29
									
								
								src/bind.zsh
								
								
								
								
							|  | @ -4,21 +4,8 @@ | ||||||
| #--------------------------------------------------------------------# | #--------------------------------------------------------------------# | ||||||
| 
 | 
 | ||||||
| _zsh_autosuggest_incr_bind_count() { | _zsh_autosuggest_incr_bind_count() { | ||||||
| 	if ((${+_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]})); then | 	typeset -gi bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]+1)) | ||||||
| 		((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]++)) | 	_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=$bind_count | ||||||
| 	else |  | ||||||
| 		_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=1 |  | ||||||
| 	fi |  | ||||||
| 
 |  | ||||||
| 	typeset -gi bind_count=$_ZSH_AUTOSUGGEST_BIND_COUNTS[$1] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| _zsh_autosuggest_get_bind_count() { |  | ||||||
| 	if ((${+_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]})); then |  | ||||||
| 		typeset -gi bind_count=$_ZSH_AUTOSUGGEST_BIND_COUNTS[$1] |  | ||||||
| 	else |  | ||||||
| 		typeset -gi bind_count=0 |  | ||||||
| 	fi |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Bind a single widget to an autosuggest widget, saving a reference to the original widget | # Bind a single widget to an autosuggest widget, saving a reference to the original widget | ||||||
|  | @ -34,30 +21,30 @@ _zsh_autosuggest_bind_widget() { | ||||||
| 	# Save a reference to the original widget | 	# Save a reference to the original widget | ||||||
| 	case $widgets[$widget] in | 	case $widgets[$widget] in | ||||||
| 		# Already bound | 		# Already bound | ||||||
| 		user:_zsh_autosuggest_(bound|orig)_*);; | 		user:_zsh_autosuggest_(bound|orig)_*) | ||||||
|  | 			bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$widget])) | ||||||
|  | 			;; | ||||||
| 
 | 
 | ||||||
| 		# User-defined widget | 		# User-defined widget | ||||||
| 		user:*) | 		user:*) | ||||||
| 			_zsh_autosuggest_incr_bind_count $widget | 			_zsh_autosuggest_incr_bind_count $widget | ||||||
| 			zle -N $prefix${bind_count}-$widget ${widgets[$widget]#*:} | 			zle -N $prefix$bind_count-$widget ${widgets[$widget]#*:} | ||||||
| 			;; | 			;; | ||||||
| 
 | 
 | ||||||
| 		# Built-in widget | 		# Built-in widget | ||||||
| 		builtin) | 		builtin) | ||||||
| 			_zsh_autosuggest_incr_bind_count $widget | 			_zsh_autosuggest_incr_bind_count $widget | ||||||
| 			eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }" | 			eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }" | ||||||
| 			zle -N $prefix${bind_count}-$widget _zsh_autosuggest_orig_$widget | 			zle -N $prefix$bind_count-$widget _zsh_autosuggest_orig_$widget | ||||||
| 			;; | 			;; | ||||||
| 
 | 
 | ||||||
| 		# Completion widget | 		# Completion widget | ||||||
| 		completion:*) | 		completion:*) | ||||||
| 			_zsh_autosuggest_incr_bind_count $widget | 			_zsh_autosuggest_incr_bind_count $widget | ||||||
| 			eval "zle -C $prefix${bind_count}-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}" | 			eval "zle -C $prefix$bind_count-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}" | ||||||
| 			;; | 			;; | ||||||
| 	esac | 	esac | ||||||
| 
 | 
 | ||||||
| 	_zsh_autosuggest_get_bind_count $widget |  | ||||||
| 
 |  | ||||||
| 	# Pass the original widget's name explicitly into the autosuggest | 	# Pass the original widget's name explicitly into the autosuggest | ||||||
| 	# function. Use this passed in widget name to call the original | 	# function. Use this passed in widget name to call the original | ||||||
| 	# widget instead of relying on the $WIDGET variable being set | 	# widget instead of relying on the $WIDGET variable being set | ||||||
|  |  | ||||||
|  | @ -6,17 +6,24 @@ | ||||||
| # Color to use when highlighting suggestion | # Color to use when highlighting suggestion | ||||||
| # Uses format of `region_highlight` | # Uses format of `region_highlight` | ||||||
| # More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets | # More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets | ||||||
| : ${ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'} | (( ! ${+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' | ||||||
| 
 | 
 | ||||||
| # Prefix to use when saving original versions of bound widgets | # Prefix to use when saving original versions of bound widgets | ||||||
| : ${ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-} | (( ! ${+ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig- | ||||||
| 
 | 
 | ||||||
| # Strategies to use to fetch a suggestion | # Strategies to use to fetch a suggestion | ||||||
| # Will try each strategy in order until a suggestion is returned | # Will try each strategy in order until a suggestion is returned | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && ZSH_AUTOSUGGEST_STRATEGY=(history) | (( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_STRATEGY | ||||||
|  | 	ZSH_AUTOSUGGEST_STRATEGY=(history) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that clear the suggestion | # Widgets that clear the suggestion | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && ZSH_AUTOSUGGEST_CLEAR_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_CLEAR_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_CLEAR_WIDGETS=( | ||||||
| 		history-search-forward | 		history-search-forward | ||||||
| 		history-search-backward | 		history-search-backward | ||||||
| 		history-beginning-search-forward | 		history-beginning-search-forward | ||||||
|  | @ -28,23 +35,32 @@ | ||||||
| 		up-line-or-history | 		up-line-or-history | ||||||
| 		down-line-or-history | 		down-line-or-history | ||||||
| 		accept-line | 		accept-line | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that accept the entire suggestion | # Widgets that accept the entire suggestion | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_ACCEPT_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=( | ||||||
| 		forward-char | 		forward-char | ||||||
| 		end-of-line | 		end-of-line | ||||||
| 		vi-forward-char | 		vi-forward-char | ||||||
| 		vi-end-of-line | 		vi-end-of-line | ||||||
| 		vi-add-eol | 		vi-add-eol | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that accept the entire suggestion and execute it | # Widgets that accept the entire suggestion and execute it | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && { | ||||||
| ) | 	typeset -ga ZSH_AUTOSUGGEST_EXECUTE_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=( | ||||||
|  | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that accept the suggestion as far as the cursor moves | # Widgets that accept the suggestion as far as the cursor moves | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( | ||||||
| 		forward-word | 		forward-word | ||||||
| 		emacs-forward-word | 		emacs-forward-word | ||||||
| 		vi-forward-word | 		vi-forward-word | ||||||
|  | @ -53,10 +69,13 @@ | ||||||
| 		vi-forward-blank-word-end | 		vi-forward-blank-word-end | ||||||
| 		vi-find-next-char | 		vi-find-next-char | ||||||
| 		vi-find-next-char-skip | 		vi-find-next-char-skip | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that should be ignored (globbing supported but must be escaped) | # Widgets that should be ignored (globbing supported but must be escaped) | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && ZSH_AUTOSUGGEST_IGNORE_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_IGNORE_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_IGNORE_WIDGETS=( | ||||||
| 		orig-\* | 		orig-\* | ||||||
| 		beep | 		beep | ||||||
| 		run-help | 		run-help | ||||||
|  | @ -64,10 +83,13 @@ | ||||||
| 		which-command | 		which-command | ||||||
| 		yank | 		yank | ||||||
| 		yank-pop | 		yank-pop | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Max size of buffer to trigger autosuggestion. Leave null for no upper bound. | # Max size of buffer to trigger autosuggestion. Leave null for no upper bound. | ||||||
| : ${ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=} | (( ! ${+ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE= | ||||||
| 
 | 
 | ||||||
| # Pty name for calculating autosuggestions asynchronously | # Pty name for calculating autosuggestions asynchronously | ||||||
| : ${ZSH_AUTOSUGGEST_ASYNC_PTY_NAME=zsh_autosuggest_pty} | (( ! ${+ZSH_AUTOSUGGEST_ASYNC_PTY_NAME} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_ASYNC_PTY_NAME=zsh_autosuggest_pty | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| _zsh_autosuggest_fetch_suggestion() { | _zsh_autosuggest_fetch_suggestion() { | ||||||
| 	typeset -g suggestion | 	typeset -g suggestion | ||||||
| 	local -a strategies | 	local -a strategies | ||||||
|  | 	local strategy | ||||||
| 
 | 
 | ||||||
| 	# Ensure we are working with an array | 	# Ensure we are working with an array | ||||||
| 	strategies=(${=ZSH_AUTOSUGGEST_STRATEGY}) | 	strategies=(${=ZSH_AUTOSUGGEST_STRATEGY}) | ||||||
|  |  | ||||||
|  | @ -37,8 +37,6 @@ _zsh_autosuggest_clear() { | ||||||
| 
 | 
 | ||||||
| # Modify the buffer and get a new suggestion | # Modify the buffer and get a new suggestion | ||||||
| _zsh_autosuggest_modify() { | _zsh_autosuggest_modify() { | ||||||
| 	emulate -L zsh |  | ||||||
| 
 |  | ||||||
| 	local -i retval | 	local -i retval | ||||||
| 
 | 
 | ||||||
| 	# Only available in zsh >= 5.4 | 	# Only available in zsh >= 5.4 | ||||||
|  | @ -55,6 +53,8 @@ _zsh_autosuggest_modify() { | ||||||
| 	_zsh_autosuggest_invoke_original_widget $@ | 	_zsh_autosuggest_invoke_original_widget $@ | ||||||
| 	retval=$? | 	retval=$? | ||||||
| 
 | 
 | ||||||
|  | 	emulate -L zsh | ||||||
|  | 
 | ||||||
| 	# Don't fetch a new suggestion if there's more input to be read immediately | 	# Don't fetch a new suggestion if there's more input to be read immediately | ||||||
| 	if (( $PENDING > 0 )) || (( $KEYS_QUEUED_COUNT > 0 )); then | 	if (( $PENDING > 0 )) || (( $KEYS_QUEUED_COUNT > 0 )); then | ||||||
| 		POSTDISPLAY="$orig_postdisplay" | 		POSTDISPLAY="$orig_postdisplay" | ||||||
|  | @ -190,7 +190,9 @@ _zsh_autosuggest_partial_accept() { | ||||||
| 	return $retval | 	return $retval | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| for action in clear modify fetch suggest accept partial_accept execute enable disable toggle; do | () { | ||||||
|  | 	local action | ||||||
|  | 	for action in clear modify fetch suggest accept partial_accept execute enable disable toggle; do | ||||||
| 		eval "_zsh_autosuggest_widget_$action() { | 		eval "_zsh_autosuggest_widget_$action() { | ||||||
| 			local -i retval | 			local -i retval | ||||||
| 
 | 
 | ||||||
|  | @ -205,13 +207,14 @@ for action in clear modify fetch suggest accept partial_accept execute enable di | ||||||
| 
 | 
 | ||||||
| 			return \$retval | 			return \$retval | ||||||
| 		}" | 		}" | ||||||
| done | 	done | ||||||
| 
 | 
 | ||||||
| zle -N autosuggest-fetch _zsh_autosuggest_widget_fetch | 	zle -N autosuggest-fetch _zsh_autosuggest_widget_fetch | ||||||
| zle -N autosuggest-suggest _zsh_autosuggest_widget_suggest | 	zle -N autosuggest-suggest _zsh_autosuggest_widget_suggest | ||||||
| zle -N autosuggest-accept _zsh_autosuggest_widget_accept | 	zle -N autosuggest-accept _zsh_autosuggest_widget_accept | ||||||
| zle -N autosuggest-clear _zsh_autosuggest_widget_clear | 	zle -N autosuggest-clear _zsh_autosuggest_widget_clear | ||||||
| zle -N autosuggest-execute _zsh_autosuggest_widget_execute | 	zle -N autosuggest-execute _zsh_autosuggest_widget_execute | ||||||
| zle -N autosuggest-enable _zsh_autosuggest_widget_enable | 	zle -N autosuggest-enable _zsh_autosuggest_widget_enable | ||||||
| zle -N autosuggest-disable _zsh_autosuggest_widget_disable | 	zle -N autosuggest-disable _zsh_autosuggest_widget_disable | ||||||
| zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle | 	zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -42,17 +42,24 @@ zmodload zsh/zpty | ||||||
| # Color to use when highlighting suggestion | # Color to use when highlighting suggestion | ||||||
| # Uses format of `region_highlight` | # Uses format of `region_highlight` | ||||||
| # More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets | # More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets | ||||||
| : ${ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'} | (( ! ${+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' | ||||||
| 
 | 
 | ||||||
| # Prefix to use when saving original versions of bound widgets | # Prefix to use when saving original versions of bound widgets | ||||||
| : ${ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-} | (( ! ${+ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig- | ||||||
| 
 | 
 | ||||||
| # Strategies to use to fetch a suggestion | # Strategies to use to fetch a suggestion | ||||||
| # Will try each strategy in order until a suggestion is returned | # Will try each strategy in order until a suggestion is returned | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && ZSH_AUTOSUGGEST_STRATEGY=(history) | (( ! ${+ZSH_AUTOSUGGEST_STRATEGY} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_STRATEGY | ||||||
|  | 	ZSH_AUTOSUGGEST_STRATEGY=(history) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that clear the suggestion | # Widgets that clear the suggestion | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && ZSH_AUTOSUGGEST_CLEAR_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_CLEAR_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_CLEAR_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_CLEAR_WIDGETS=( | ||||||
| 		history-search-forward | 		history-search-forward | ||||||
| 		history-search-backward | 		history-search-backward | ||||||
| 		history-beginning-search-forward | 		history-beginning-search-forward | ||||||
|  | @ -64,23 +71,32 @@ zmodload zsh/zpty | ||||||
| 		up-line-or-history | 		up-line-or-history | ||||||
| 		down-line-or-history | 		down-line-or-history | ||||||
| 		accept-line | 		accept-line | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that accept the entire suggestion | # Widgets that accept the entire suggestion | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_ACCEPT_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=( | ||||||
| 		forward-char | 		forward-char | ||||||
| 		end-of-line | 		end-of-line | ||||||
| 		vi-forward-char | 		vi-forward-char | ||||||
| 		vi-end-of-line | 		vi-end-of-line | ||||||
| 		vi-add-eol | 		vi-add-eol | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that accept the entire suggestion and execute it | # Widgets that accept the entire suggestion and execute it | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_EXECUTE_WIDGETS} )) && { | ||||||
| ) | 	typeset -ga ZSH_AUTOSUGGEST_EXECUTE_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=( | ||||||
|  | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that accept the suggestion as far as the cursor moves | # Widgets that accept the suggestion as far as the cursor moves | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=( | ||||||
| 		forward-word | 		forward-word | ||||||
| 		emacs-forward-word | 		emacs-forward-word | ||||||
| 		vi-forward-word | 		vi-forward-word | ||||||
|  | @ -89,10 +105,13 @@ zmodload zsh/zpty | ||||||
| 		vi-forward-blank-word-end | 		vi-forward-blank-word-end | ||||||
| 		vi-find-next-char | 		vi-find-next-char | ||||||
| 		vi-find-next-char-skip | 		vi-find-next-char-skip | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Widgets that should be ignored (globbing supported but must be escaped) | # Widgets that should be ignored (globbing supported but must be escaped) | ||||||
| (( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && ZSH_AUTOSUGGEST_IGNORE_WIDGETS=( | (( ! ${+ZSH_AUTOSUGGEST_IGNORE_WIDGETS} )) && { | ||||||
|  | 	typeset -ga ZSH_AUTOSUGGEST_IGNORE_WIDGETS | ||||||
|  | 	ZSH_AUTOSUGGEST_IGNORE_WIDGETS=( | ||||||
| 		orig-\* | 		orig-\* | ||||||
| 		beep | 		beep | ||||||
| 		run-help | 		run-help | ||||||
|  | @ -100,13 +119,16 @@ zmodload zsh/zpty | ||||||
| 		which-command | 		which-command | ||||||
| 		yank | 		yank | ||||||
| 		yank-pop | 		yank-pop | ||||||
| ) | 	) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| # Max size of buffer to trigger autosuggestion. Leave null for no upper bound. | # Max size of buffer to trigger autosuggestion. Leave null for no upper bound. | ||||||
| : ${ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=} | (( ! ${+ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE= | ||||||
| 
 | 
 | ||||||
| # Pty name for calculating autosuggestions asynchronously | # Pty name for calculating autosuggestions asynchronously | ||||||
| : ${ZSH_AUTOSUGGEST_ASYNC_PTY_NAME=zsh_autosuggest_pty} | (( ! ${+ZSH_AUTOSUGGEST_ASYNC_PTY_NAME} )) && | ||||||
|  | typeset -g ZSH_AUTOSUGGEST_ASYNC_PTY_NAME=zsh_autosuggest_pty | ||||||
| 
 | 
 | ||||||
| #--------------------------------------------------------------------# | #--------------------------------------------------------------------# | ||||||
| # Utility Functions                                                  # | # Utility Functions                                                  # | ||||||
|  | @ -143,21 +165,8 @@ _zsh_autosuggest_feature_detect_zpty_returns_fd() { | ||||||
| #--------------------------------------------------------------------# | #--------------------------------------------------------------------# | ||||||
| 
 | 
 | ||||||
| _zsh_autosuggest_incr_bind_count() { | _zsh_autosuggest_incr_bind_count() { | ||||||
| 	if ((${+_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]})); then | 	typeset -gi bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]+1)) | ||||||
| 		((_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]++)) | 	_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=$bind_count | ||||||
| 	else |  | ||||||
| 		_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]=1 |  | ||||||
| 	fi |  | ||||||
| 
 |  | ||||||
| 	typeset -gi bind_count=$_ZSH_AUTOSUGGEST_BIND_COUNTS[$1] |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| _zsh_autosuggest_get_bind_count() { |  | ||||||
| 	if ((${+_ZSH_AUTOSUGGEST_BIND_COUNTS[$1]})); then |  | ||||||
| 		typeset -gi bind_count=$_ZSH_AUTOSUGGEST_BIND_COUNTS[$1] |  | ||||||
| 	else |  | ||||||
| 		typeset -gi bind_count=0 |  | ||||||
| 	fi |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Bind a single widget to an autosuggest widget, saving a reference to the original widget | # Bind a single widget to an autosuggest widget, saving a reference to the original widget | ||||||
|  | @ -173,30 +182,30 @@ _zsh_autosuggest_bind_widget() { | ||||||
| 	# Save a reference to the original widget | 	# Save a reference to the original widget | ||||||
| 	case $widgets[$widget] in | 	case $widgets[$widget] in | ||||||
| 		# Already bound | 		# Already bound | ||||||
| 		user:_zsh_autosuggest_(bound|orig)_*);; | 		user:_zsh_autosuggest_(bound|orig)_*) | ||||||
|  | 			bind_count=$((_ZSH_AUTOSUGGEST_BIND_COUNTS[$widget])) | ||||||
|  | 			;; | ||||||
| 
 | 
 | ||||||
| 		# User-defined widget | 		# User-defined widget | ||||||
| 		user:*) | 		user:*) | ||||||
| 			_zsh_autosuggest_incr_bind_count $widget | 			_zsh_autosuggest_incr_bind_count $widget | ||||||
| 			zle -N $prefix${bind_count}-$widget ${widgets[$widget]#*:} | 			zle -N $prefix$bind_count-$widget ${widgets[$widget]#*:} | ||||||
| 			;; | 			;; | ||||||
| 
 | 
 | ||||||
| 		# Built-in widget | 		# Built-in widget | ||||||
| 		builtin) | 		builtin) | ||||||
| 			_zsh_autosuggest_incr_bind_count $widget | 			_zsh_autosuggest_incr_bind_count $widget | ||||||
| 			eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }" | 			eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }" | ||||||
| 			zle -N $prefix${bind_count}-$widget _zsh_autosuggest_orig_$widget | 			zle -N $prefix$bind_count-$widget _zsh_autosuggest_orig_$widget | ||||||
| 			;; | 			;; | ||||||
| 
 | 
 | ||||||
| 		# Completion widget | 		# Completion widget | ||||||
| 		completion:*) | 		completion:*) | ||||||
| 			_zsh_autosuggest_incr_bind_count $widget | 			_zsh_autosuggest_incr_bind_count $widget | ||||||
| 			eval "zle -C $prefix${bind_count}-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}" | 			eval "zle -C $prefix$bind_count-${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}" | ||||||
| 			;; | 			;; | ||||||
| 	esac | 	esac | ||||||
| 
 | 
 | ||||||
| 	_zsh_autosuggest_get_bind_count $widget |  | ||||||
| 
 |  | ||||||
| 	# Pass the original widget's name explicitly into the autosuggest | 	# Pass the original widget's name explicitly into the autosuggest | ||||||
| 	# function. Use this passed in widget name to call the original | 	# function. Use this passed in widget name to call the original | ||||||
| 	# widget instead of relying on the $WIDGET variable being set | 	# widget instead of relying on the $WIDGET variable being set | ||||||
|  | @ -322,8 +331,6 @@ _zsh_autosuggest_clear() { | ||||||
| 
 | 
 | ||||||
| # Modify the buffer and get a new suggestion | # Modify the buffer and get a new suggestion | ||||||
| _zsh_autosuggest_modify() { | _zsh_autosuggest_modify() { | ||||||
| 	emulate -L zsh |  | ||||||
| 
 |  | ||||||
| 	local -i retval | 	local -i retval | ||||||
| 
 | 
 | ||||||
| 	# Only available in zsh >= 5.4 | 	# Only available in zsh >= 5.4 | ||||||
|  | @ -340,6 +347,8 @@ _zsh_autosuggest_modify() { | ||||||
| 	_zsh_autosuggest_invoke_original_widget $@ | 	_zsh_autosuggest_invoke_original_widget $@ | ||||||
| 	retval=$? | 	retval=$? | ||||||
| 
 | 
 | ||||||
|  | 	emulate -L zsh | ||||||
|  | 
 | ||||||
| 	# Don't fetch a new suggestion if there's more input to be read immediately | 	# Don't fetch a new suggestion if there's more input to be read immediately | ||||||
| 	if (( $PENDING > 0 )) || (( $KEYS_QUEUED_COUNT > 0 )); then | 	if (( $PENDING > 0 )) || (( $KEYS_QUEUED_COUNT > 0 )); then | ||||||
| 		POSTDISPLAY="$orig_postdisplay" | 		POSTDISPLAY="$orig_postdisplay" | ||||||
|  | @ -475,7 +484,9 @@ _zsh_autosuggest_partial_accept() { | ||||||
| 	return $retval | 	return $retval | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| for action in clear modify fetch suggest accept partial_accept execute enable disable toggle; do | () { | ||||||
|  | 	local action | ||||||
|  | 	for action in clear modify fetch suggest accept partial_accept execute enable disable toggle; do | ||||||
| 		eval "_zsh_autosuggest_widget_$action() { | 		eval "_zsh_autosuggest_widget_$action() { | ||||||
| 			local -i retval | 			local -i retval | ||||||
| 
 | 
 | ||||||
|  | @ -490,16 +501,17 @@ for action in clear modify fetch suggest accept partial_accept execute enable di | ||||||
| 
 | 
 | ||||||
| 			return \$retval | 			return \$retval | ||||||
| 		}" | 		}" | ||||||
| done | 	done | ||||||
| 
 | 
 | ||||||
| zle -N autosuggest-fetch _zsh_autosuggest_widget_fetch | 	zle -N autosuggest-fetch _zsh_autosuggest_widget_fetch | ||||||
| zle -N autosuggest-suggest _zsh_autosuggest_widget_suggest | 	zle -N autosuggest-suggest _zsh_autosuggest_widget_suggest | ||||||
| zle -N autosuggest-accept _zsh_autosuggest_widget_accept | 	zle -N autosuggest-accept _zsh_autosuggest_widget_accept | ||||||
| zle -N autosuggest-clear _zsh_autosuggest_widget_clear | 	zle -N autosuggest-clear _zsh_autosuggest_widget_clear | ||||||
| zle -N autosuggest-execute _zsh_autosuggest_widget_execute | 	zle -N autosuggest-execute _zsh_autosuggest_widget_execute | ||||||
| zle -N autosuggest-enable _zsh_autosuggest_widget_enable | 	zle -N autosuggest-enable _zsh_autosuggest_widget_enable | ||||||
| zle -N autosuggest-disable _zsh_autosuggest_widget_disable | 	zle -N autosuggest-disable _zsh_autosuggest_widget_disable | ||||||
| zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle | 	zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| #--------------------------------------------------------------------# | #--------------------------------------------------------------------# | ||||||
| # History Suggestion Strategy                                        # | # History Suggestion Strategy                                        # | ||||||
|  | @ -595,6 +607,7 @@ _zsh_autosuggest_strategy_match_prev_cmd() { | ||||||
| _zsh_autosuggest_fetch_suggestion() { | _zsh_autosuggest_fetch_suggestion() { | ||||||
| 	typeset -g suggestion | 	typeset -g suggestion | ||||||
| 	local -a strategies | 	local -a strategies | ||||||
|  | 	local strategy | ||||||
| 
 | 
 | ||||||
| 	# Ensure we are working with an array | 	# Ensure we are working with an array | ||||||
| 	strategies=(${=ZSH_AUTOSUGGEST_STRATEGY}) | 	strategies=(${=ZSH_AUTOSUGGEST_STRATEGY}) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue