Feature: Allow cycling throw history in the autocompletion

This commit is contained in:
Marcelo Lima 2018-11-04 21:29:58 +01:00
commit 47173c140c
12 changed files with 282 additions and 38 deletions

View file

@ -1,7 +1,7 @@
describe 'a suggestion for a given prefix' do
let(:history_strategy) { '_zsh_autosuggest_strategy_history() { suggestion="history" }' }
let(:foobar_strategy) { '_zsh_autosuggest_strategy_foobar() { [[ "foobar baz" = $1* ]] && suggestion="foobar baz" }' }
let(:foobaz_strategy) { '_zsh_autosuggest_strategy_foobaz() { [[ "foobaz bar" = $1* ]] && suggestion="foobaz bar" }' }
let(:foobar_strategy) { '_zsh_autosuggest_strategy_foobar() { [[ "foobar baz" = $2* ]] && suggestion="foobar baz" }' }
let(:foobaz_strategy) { '_zsh_autosuggest_strategy_foobaz() { [[ "foobaz bar" = $2* ]] && suggestion="foobaz bar" }' }
let(:options) { [ history_strategy ] }

63
spec/widgets/next_spec.rb Normal file
View file

@ -0,0 +1,63 @@
describe 'the `autosuggest-next` widget' do
context 'when suggestions are disabled' do
before do
session.
run_command('bindkey ^B autosuggest-disable').
run_command('bindkey ^K autosuggest-next').
send_keys('C-b')
end
it 'will fetch and display a suggestion' do
with_history('echo hello', 'echo world', 'echo joe') do
session.send_string('echo h')
sleep 1
expect(session.content).to eq('echo h')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_string('e')
wait_for { session.content }.to eq('echo hello')
end
end
end
context 'invoked on a populated history' do
before do
session.
run_command('bindkey ^K autosuggest-next')
end
it 'will cycle, fetch, and display a suggestion' do
with_history('echo hello', 'echo world', 'echo joe') do
session.send_string('echo')
sleep 1
expect(session.content).to eq('echo joe')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo world')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
end
end
end
context 'when async mode is enabled' do
let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=history'] }
before do
session.
run_command('bindkey ^K autosuggest-next')
end
it 'will cycle, fetch, and display a suggestion' do
with_history('echo hello', 'echo world', 'echo joe') do
session.send_string('echo')
sleep 1
expect(session.content).to eq('echo joe')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo world')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
end
end
end
end

View file

@ -0,0 +1,77 @@
describe 'the `autosuggest-previous` widget' do
context 'when suggestions are disabled' do
before do
session.
run_command('bindkey ^B autosuggest-disable').
run_command('bindkey ^J autosuggest-previous').
send_keys('C-b')
end
it 'will fetch and display a suggestion' do
with_history('echo hello', 'echo world', 'echo joe') do
session.send_string('echo h')
sleep 1
expect(session.content).to eq('echo h')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo hello')
session.send_string('e')
wait_for { session.content }.to eq('echo hello')
end
end
end
context 'invoked on a populated history' do
before do
session.
run_command('bindkey ^K autosuggest-next').
run_command('bindkey ^J autosuggest-previous')
end
it 'will cycle, fetch, and display a suggestion' do
with_history('echo hello', 'echo world', 'echo joe') do
session.send_string('echo')
sleep 1
expect(session.content).to eq('echo joe')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo world')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo world')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo joe')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo joe')
end
end
end
context 'when async mode is enabled' do
let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=history'] }
before do
session.
run_command('bindkey ^K autosuggest-next').
run_command('bindkey ^J autosuggest-previous')
end
it 'will cycle, fetch, and display a suggestion' do
with_history('echo hello', 'echo world', 'echo joe') do
session.send_string('echo')
sleep 1
expect(session.content).to eq('echo joe')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo world')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_keys('C-k')
wait_for { session.content }.to eq('echo hello')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo world')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo joe')
session.send_keys('C-j')
wait_for { session.content }.to eq('echo joe')
end
end
end
end