Use zle redraw hook if available (>= 5.4)

This commit is contained in:
Eric Freese 2019-01-11 19:02:55 -07:00
commit 161de32912
8 changed files with 249 additions and 141 deletions

View file

@ -1,16 +1,24 @@
describe 'a wrapped widget' do
let(:widget) { 'backward-delete-char' }
context 'initialized before sourcing the plugin' do
let(:before_sourcing) do
-> do
session.
run_command("_orig_#{widget}() { zle .#{widget} }").
run_command("zle -N orig-#{widget} _orig_#{widget}").
run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }").
run_command("zle -N #{widget} #{widget}-magic")
end
let(:initialize_widget) do
-> do
session.run_command(<<~ZSH)
if [[ "$widgets[#{widget}]" == "builtin" ]]; then
_orig_#{widget}() { zle .#{widget} }
zle -N orig-#{widget} _orig_#{widget}
else
zle -N orig-#{widget} ${widgets[#{widget}]#*:}
fi
#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }
zle -N #{widget} #{widget}-magic
ZSH
end
end
context 'initialized before sourcing the plugin' do
let(:before_sourcing) { initialize_widget }
it 'executes the custom behavior and the built-in behavior' do
with_history('foobar', 'foodar') do
@ -21,13 +29,7 @@ describe 'a wrapped widget' do
end
context 'initialized after sourcing the plugin' do
before do
session.
run_command("zle -N orig-#{widget} ${widgets[#{widget}]#*:}").
run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }").
run_command("zle -N #{widget} #{widget}-magic").
clear_screen
end
let(:after_sourcing) { initialize_widget }
it 'executes the custom behavior and the built-in behavior' do
with_history('foobar', 'foodar') do

View file

@ -41,12 +41,20 @@ describe 'a zle widget' do
end
end
context 'when added to ZSH_AUTOSUGGEST_IGNORE_WIDGETS' do
let(:options) { ["ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(#{widget})"] }
context 'that accesses POSTDISPLAY' do
before { session.run_command("#{widget}() { zle -M \"POSTDISPLAY=$POSTDISPLAY\" }") }
it 'should not be wrapped with an autosuggest widget' do
session.run_command("echo $widgets[#{widget}]")
wait_for { session.content }.to end_with("\nuser:#{widget}")
context 'when added to ZSH_AUTOSUGGEST_IGNORE_WIDGETS' do
let(:options) { ["ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(#{widget})"] }
it 'gets the correct POSTDISPLAY value' do
with_history('echo hello') do
session.send_string('e')
wait_for { session.content }.to start_with('echo hello')
session.send_keys('C-b')
wait_for { session.content }.to end_with("\nPOSTDISPLAY=cho hello")
end
end
end
end