From 1912726460f2ef48ecba6fd2bc56287cb1a55c50 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 14 Jun 2019 12:49:57 -0600 Subject: [PATCH 1/2] Try to make async ^C spec less flaky Was intermittently failing, sleep for a little longer to increase chances of false negatives. --- spec/async_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/async_spec.rb b/spec/async_spec.rb index c4029a1..814ea70 100644 --- a/spec/async_spec.rb +++ b/spec/async_spec.rb @@ -34,9 +34,9 @@ context 'with asynchronous suggestions enabled' do it 'terminates the prompt and begins a new one' do session.send_keys('e') - sleep 0.1 + sleep 0.5 session.send_keys('C-c') - sleep 0.1 + sleep 0.5 session.send_keys('echo') wait_for { session.content }.to eq("e\necho") From 527fd17ffc9ec0343e6d7718ff1ff245c703756f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henr=C3=A9=20Botha?= Date: Fri, 14 Jun 2019 17:48:31 +0200 Subject: [PATCH 2/2] Don't fetch suggestions after copy-earlier-word Like {up,down}-line-or-beginning-search, this widget relies on `$LASTWIDGET` being set to function correctly on subsequent invocations. When asynchronous suggestions are enabled, and the widget triggers a suggestion to be fetched, `autosuggest-suggest` will be called and $LASTWIDGET will be set to it. --- spec/async_spec.rb | 23 +++++++++++++++++++++++ src/config.zsh | 1 + zsh-autosuggestions.zsh | 1 + 3 files changed, 25 insertions(+) diff --git a/spec/async_spec.rb b/spec/async_spec.rb index 814ea70..0af7232 100644 --- a/spec/async_spec.rb +++ b/spec/async_spec.rb @@ -27,6 +27,29 @@ context 'with asynchronous suggestions enabled' do end end + describe '`copy-earlier-word`' do + let(:before_sourcing) do + -> do + session. + run_command('autoload -Uz copy-earlier-word'). + run_command('zle -N copy-earlier-word'). + run_command('bindkey "^N" copy-earlier-word') + end + end + + it 'should cycle through previous words in the buffer' do + session.clear_screen + session.send_string('foo bar baz') + sleep 0.5 + session.send_keys('C-n') + wait_for { session.content }.to eq('foo bar bazbaz') + session.send_keys('C-n') + wait_for { session.content }.to eq('foo bar bazbar') + session.send_keys('C-n') + wait_for { session.content }.to eq('foo bar bazfoo') + end + end + describe 'pressing ^C after fetching a suggestion' do before do skip 'Workaround does not work below v5.0.8' if session.zsh_version < Gem::Version.new('5.0.8') diff --git a/src/config.zsh b/src/config.zsh index 2f46aed..442358f 100644 --- a/src/config.zsh +++ b/src/config.zsh @@ -35,6 +35,7 @@ typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig- up-line-or-history down-line-or-history accept-line + copy-earlier-word ) } diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index 645d00f..385dd9e 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -71,6 +71,7 @@ typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig- up-line-or-history down-line-or-history accept-line + copy-earlier-word ) }