diff --git a/src/widgets.zsh b/src/widgets.zsh index c6f1137..8f09792 100644 --- a/src/widgets.zsh +++ b/src/widgets.zsh @@ -119,7 +119,7 @@ _zsh_autosuggest_suggest() { # Accept the entire suggestion _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 # to the end of the buffer @@ -127,7 +127,9 @@ _zsh_autosuggest_accept() { max_cursor_pos=$((max_cursor_pos - 1)) fi - if (( $CURSOR != $max_cursor_pos )); then + # 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 @@ -139,6 +141,11 @@ _zsh_autosuggest_accept() { # Remove the suggestion 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 if [[ "$KEYMAP" = "vicmd" ]]; then CURSOR=$(($#BUFFER - 1)) @@ -146,7 +153,7 @@ _zsh_autosuggest_accept() { CURSOR=$#BUFFER fi - _zsh_autosuggest_invoke_original_widget $@ + return $retval } # Accept the entire suggestion and execute it diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index 899dcf3..0e1549a 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -381,7 +381,7 @@ _zsh_autosuggest_suggest() { # Accept the entire suggestion _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 # to the end of the buffer @@ -389,7 +389,9 @@ _zsh_autosuggest_accept() { max_cursor_pos=$((max_cursor_pos - 1)) fi - if (( $CURSOR != $max_cursor_pos )); then + # 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 @@ -401,6 +403,11 @@ _zsh_autosuggest_accept() { # Remove the suggestion 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 if [[ "$KEYMAP" = "vicmd" ]]; then CURSOR=$(($#BUFFER - 1)) @@ -408,7 +415,7 @@ _zsh_autosuggest_accept() { CURSOR=$#BUFFER fi - _zsh_autosuggest_invoke_original_widget $@ + return $retval } # Accept the entire suggestion and execute it