mirror of
				https://github.com/zsh-users/zsh-autosuggestions.git
				synced 2024-05-11 05:54:57 +00:00 
			
		
		
		
	Merge pull request #488 from zsh-users/fixes/run-orig-before-move-cursor
Call original widget before moving cursor when accepting suggestion
This commit is contained in:
		| @@ -56,7 +56,7 @@ _zsh_autosuggest_modify() { | |||||||
| 	emulate -L zsh | 	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" | ||||||
| 		return $retval | 		return $retval | ||||||
| 	fi | 	fi | ||||||
| @@ -119,7 +119,7 @@ _zsh_autosuggest_suggest() { | |||||||
|  |  | ||||||
| # Accept the entire suggestion | # Accept the entire suggestion | ||||||
| _zsh_autosuggest_accept() { | _zsh_autosuggest_accept() { | ||||||
| 	local -i max_cursor_pos=$#BUFFER | 	local -i retval max_cursor_pos=$#BUFFER | ||||||
|  |  | ||||||
| 	# When vicmd keymap is active, the cursor can't move all the way | 	# When vicmd keymap is active, the cursor can't move all the way | ||||||
| 	# to the end of the buffer | 	# to the end of the buffer | ||||||
| @@ -127,23 +127,33 @@ _zsh_autosuggest_accept() { | |||||||
| 		max_cursor_pos=$((max_cursor_pos - 1)) | 		max_cursor_pos=$((max_cursor_pos - 1)) | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
|  | 	# If we're not in a valid state to accept a suggestion, just run the | ||||||
|  | 	# original widget and bail out | ||||||
|  | 	if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then | ||||||
|  | 		_zsh_autosuggest_invoke_original_widget $@ | ||||||
|  | 		return | ||||||
|  | 	fi | ||||||
|  |  | ||||||
| 	# Only accept if the cursor is at the end of the buffer | 	# Only accept if the cursor is at the end of the buffer | ||||||
| 	if [[ $CURSOR = $max_cursor_pos ]]; then |  | ||||||
| 	# Add the suggestion to the buffer | 	# Add the suggestion to the buffer | ||||||
| 	BUFFER="$BUFFER$POSTDISPLAY" | 	BUFFER="$BUFFER$POSTDISPLAY" | ||||||
|  |  | ||||||
| 	# Remove the suggestion | 	# Remove the suggestion | ||||||
| 	unset POSTDISPLAY | 	unset POSTDISPLAY | ||||||
|  |  | ||||||
|  | 	# Run the original widget before manually moving the cursor so that the | ||||||
|  | 	# cursor movement doesn't make the widget do something unexpected | ||||||
|  | 	_zsh_autosuggest_invoke_original_widget $@ | ||||||
|  | 	retval=$? | ||||||
|  |  | ||||||
| 	# Move the cursor to the end of the buffer | 	# Move the cursor to the end of the buffer | ||||||
| 	if [[ "$KEYMAP" = "vicmd" ]]; then | 	if [[ "$KEYMAP" = "vicmd" ]]; then | ||||||
| 		CURSOR=$(($#BUFFER - 1)) | 		CURSOR=$(($#BUFFER - 1)) | ||||||
| 	else | 	else | ||||||
| 		CURSOR=$#BUFFER | 		CURSOR=$#BUFFER | ||||||
| 	fi | 	fi | ||||||
| 	fi |  | ||||||
|  |  | ||||||
| 	_zsh_autosuggest_invoke_original_widget $@ | 	return $retval | ||||||
| } | } | ||||||
|  |  | ||||||
| # Accept the entire suggestion and execute it | # Accept the entire suggestion and execute it | ||||||
|   | |||||||
| @@ -318,7 +318,7 @@ _zsh_autosuggest_modify() { | |||||||
| 	emulate -L zsh | 	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" | ||||||
| 		return $retval | 		return $retval | ||||||
| 	fi | 	fi | ||||||
| @@ -381,7 +381,7 @@ _zsh_autosuggest_suggest() { | |||||||
|  |  | ||||||
| # Accept the entire suggestion | # Accept the entire suggestion | ||||||
| _zsh_autosuggest_accept() { | _zsh_autosuggest_accept() { | ||||||
| 	local -i max_cursor_pos=$#BUFFER | 	local -i retval max_cursor_pos=$#BUFFER | ||||||
|  |  | ||||||
| 	# When vicmd keymap is active, the cursor can't move all the way | 	# When vicmd keymap is active, the cursor can't move all the way | ||||||
| 	# to the end of the buffer | 	# to the end of the buffer | ||||||
| @@ -389,23 +389,33 @@ _zsh_autosuggest_accept() { | |||||||
| 		max_cursor_pos=$((max_cursor_pos - 1)) | 		max_cursor_pos=$((max_cursor_pos - 1)) | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
|  | 	# If we're not in a valid state to accept a suggestion, just run the | ||||||
|  | 	# original widget and bail out | ||||||
|  | 	if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then | ||||||
|  | 		_zsh_autosuggest_invoke_original_widget $@ | ||||||
|  | 		return | ||||||
|  | 	fi | ||||||
|  |  | ||||||
| 	# Only accept if the cursor is at the end of the buffer | 	# Only accept if the cursor is at the end of the buffer | ||||||
| 	if [[ $CURSOR = $max_cursor_pos ]]; then |  | ||||||
| 	# Add the suggestion to the buffer | 	# Add the suggestion to the buffer | ||||||
| 	BUFFER="$BUFFER$POSTDISPLAY" | 	BUFFER="$BUFFER$POSTDISPLAY" | ||||||
|  |  | ||||||
| 	# Remove the suggestion | 	# Remove the suggestion | ||||||
| 	unset POSTDISPLAY | 	unset POSTDISPLAY | ||||||
|  |  | ||||||
|  | 	# Run the original widget before manually moving the cursor so that the | ||||||
|  | 	# cursor movement doesn't make the widget do something unexpected | ||||||
|  | 	_zsh_autosuggest_invoke_original_widget $@ | ||||||
|  | 	retval=$? | ||||||
|  |  | ||||||
| 	# Move the cursor to the end of the buffer | 	# Move the cursor to the end of the buffer | ||||||
| 	if [[ "$KEYMAP" = "vicmd" ]]; then | 	if [[ "$KEYMAP" = "vicmd" ]]; then | ||||||
| 		CURSOR=$(($#BUFFER - 1)) | 		CURSOR=$(($#BUFFER - 1)) | ||||||
| 	else | 	else | ||||||
| 		CURSOR=$#BUFFER | 		CURSOR=$#BUFFER | ||||||
| 	fi | 	fi | ||||||
| 	fi |  | ||||||
|  |  | ||||||
| 	_zsh_autosuggest_invoke_original_widget $@ | 	return $retval | ||||||
| } | } | ||||||
|  |  | ||||||
| # Accept the entire suggestion and execute it | # Accept the entire suggestion and execute it | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user