From 78e4379711433e97192fdde51a3c5af9d29713e7 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Sun, 23 Jun 2019 12:37:08 -0600 Subject: [PATCH] Fix moving cursor to end of buffer when suggestion accepted $max_cursor_pos in this case was not the correct value to use. It was calculated based on the old length of the $BUFFER. After the suggestion is accepted, we need to recalculate the new max cursor length and use it to set the $CURSOR. Fixes issue #452. Follow-up to issue #302 (PR #450). --- spec/options/widget_lists_spec.rb | 3 ++- src/widgets.zsh | 6 +++++- zsh-autosuggestions.zsh | 6 +++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/spec/options/widget_lists_spec.rb b/spec/options/widget_lists_spec.rb index db3612f..421b84e 100644 --- a/spec/options/widget_lists_spec.rb +++ b/spec/options/widget_lists_spec.rb @@ -5,12 +5,13 @@ describe 'a zle widget' do context 'when added to ZSH_AUTOSUGGEST_ACCEPT_WIDGETS' do let(:options) { ["ZSH_AUTOSUGGEST_ACCEPT_WIDGETS+=(#{widget})"] } - it 'accepts the suggestion when invoked' do + it 'accepts the suggestion and moves the cursor to the end of the buffer when invoked' do with_history('echo hello') do session.send_string('e') wait_for { session.content }.to eq('echo hello') session.send_keys('C-b') wait_for { session.content(esc_seqs: true) }.to eq('echo hello') + wait_for { session.cursor }.to eq([10, 0]) end end end diff --git a/src/widgets.zsh b/src/widgets.zsh index 2d8be5e..242d502 100644 --- a/src/widgets.zsh +++ b/src/widgets.zsh @@ -136,7 +136,11 @@ _zsh_autosuggest_accept() { unset POSTDISPLAY # Move the cursor to the end of the buffer - CURSOR=${max_cursor_pos} + if [[ "$KEYMAP" = "vicmd" ]]; then + CURSOR=$(($#BUFFER - 1)) + else + CURSOR=$#BUFFER + fi fi _zsh_autosuggest_invoke_original_widget $@ diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index 21a1a1c..a287c82 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -398,7 +398,11 @@ _zsh_autosuggest_accept() { unset POSTDISPLAY # Move the cursor to the end of the buffer - CURSOR=${max_cursor_pos} + if [[ "$KEYMAP" = "vicmd" ]]; then + CURSOR=$(($#BUFFER - 1)) + else + CURSOR=$#BUFFER + fi fi _zsh_autosuggest_invoke_original_widget $@