From e0b96e1bd6810a1303a0869658916974a6674187 Mon Sep 17 00:00:00 2001 From: Roman Perepelitsa Date: Fri, 29 May 2020 09:39:26 +0200 Subject: [PATCH] fix a bug in partial acceptance of suggestions To reproduce: 1. Run `zsh -f`. 2. Run this: function bye() { BUFFER=bye } zle -N bye bindkey '^B' bye print -s 'hibye unexpected' source ~/zsh-autosuggestions/zsh-autosuggestions.zsh 3. Type `hi` and press Ctrl-B. Expected: POSTBUFFER is empty. Actual: POSTBUFFER is " unexpected". --- src/widgets.zsh | 17 +++-------------- zsh-autosuggestions.zsh | 17 +++-------------- 2 files changed, 6 insertions(+), 28 deletions(-) diff --git a/src/widgets.zsh b/src/widgets.zsh index 8f09792..d4b36e8 100644 --- a/src/widgets.zsh +++ b/src/widgets.zsh @@ -61,20 +61,9 @@ _zsh_autosuggest_modify() { return $retval fi - # Optimize if manually typing in the suggestion - if (( $#BUFFER > $#orig_buffer )); then - local added=${BUFFER#$orig_buffer} - - # If the string added matches the beginning of the postdisplay - if [[ "$added" = "${orig_postdisplay:0:$#added}" ]]; then - POSTDISPLAY="${orig_postdisplay:$#added}" - return $retval - fi - fi - - # Don't fetch a new suggestion if the buffer hasn't changed - if [[ "$BUFFER" = "$orig_buffer" ]]; then - POSTDISPLAY="$orig_postdisplay" + # Optimize if manually typing in the suggestion or if buffer hasn't changed + if [[ "$BUFFER" = "$orig_buffer"* && "$orig_postdisplay" = "${BUFFER:$#orig_buffer}"* ]]; then + POSTDISPLAY="${orig_postdisplay:$(($#BUFFER - $#orig_buffer))}" return $retval fi diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index a8ef6c4..7121fe0 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -323,20 +323,9 @@ _zsh_autosuggest_modify() { return $retval fi - # Optimize if manually typing in the suggestion - if (( $#BUFFER > $#orig_buffer )); then - local added=${BUFFER#$orig_buffer} - - # If the string added matches the beginning of the postdisplay - if [[ "$added" = "${orig_postdisplay:0:$#added}" ]]; then - POSTDISPLAY="${orig_postdisplay:$#added}" - return $retval - fi - fi - - # Don't fetch a new suggestion if the buffer hasn't changed - if [[ "$BUFFER" = "$orig_buffer" ]]; then - POSTDISPLAY="$orig_postdisplay" + # Optimize if manually typing in the suggestion or if buffer hasn't changed + if [[ "$BUFFER" = "$orig_buffer"* && "$orig_postdisplay" = "${BUFFER:$#orig_buffer}"* ]]; then + POSTDISPLAY="${orig_postdisplay:$(($#BUFFER - $#orig_buffer))}" return $retval fi