Put in a general fix for #219 - Handling input from zle -U

Depends on patch to ZSH from workers/40702:

  http://www.zsh.org/mla/workers/2017/msg00414.html
This commit is contained in:
Eric Freese 2017-02-28 11:18:21 -07:00
parent c52c428793
commit e1959d0f61
3 changed files with 40 additions and 0 deletions

View file

@ -0,0 +1,24 @@
describe 'using `zle -U`' do
let(:before_sourcing) do
-> do
session.
run_command('_zsh_autosuggest_strategy_test() { sleep 1; _zsh_autosuggest_strategy_default "$1" }').
run_command('foo() { zle -U - "echo hello" }; zle -N foo; bindkey ^B foo')
end
end
let(:options) { ['unset ZSH_AUTOSUGGEST_USE_ASYNC', 'ZSH_AUTOSUGGEST_STRATEGY=test'] }
# TODO: This is only possible with the $KEYS_QUEUED_COUNT widget parameter, coming soon...
xit 'does not fetch a suggestion for every inserted character' do
session.send_keys('C-b')
wait_for { session.content }.to eq('echo hello')
end
it 'shows a suggestion when the widget completes' do
with_history('echo hello world') do
session.send_keys('C-b')
wait_for { session.content(esc_seqs: true) }.to match(/\Aecho hello\e\[[0-9]+m world/)
end
end
end

View file

@ -15,6 +15,9 @@ _zsh_autosuggest_clear() {
_zsh_autosuggest_modify() { _zsh_autosuggest_modify() {
local -i retval local -i retval
# Only added to zsh very recently
local -i KEYS_QUEUED_COUNT
# Save the contents of the buffer/postdisplay # Save the contents of the buffer/postdisplay
local orig_buffer="$BUFFER" local orig_buffer="$BUFFER"
local orig_postdisplay="$POSTDISPLAY" local orig_postdisplay="$POSTDISPLAY"
@ -26,6 +29,11 @@ _zsh_autosuggest_modify() {
_zsh_autosuggest_invoke_original_widget $@ _zsh_autosuggest_invoke_original_widget $@
retval=$? retval=$?
# Don't fetch a new suggestion if there's more input to be read immediately
if [[ $PENDING > 0 ]] || [[ $KEYS_QUEUED_COUNT > 0 ]]; then
return $retval
fi
# Optimize if manually typing in the suggestion # Optimize if manually typing in the suggestion
if [ $#BUFFER -gt $#orig_buffer ]; then if [ $#BUFFER -gt $#orig_buffer ]; then
local added=${BUFFER#$orig_buffer} local added=${BUFFER#$orig_buffer}

View file

@ -293,6 +293,9 @@ _zsh_autosuggest_clear() {
_zsh_autosuggest_modify() { _zsh_autosuggest_modify() {
local -i retval local -i retval
# Only added to zsh very recently
local -i KEYS_QUEUED_COUNT
# Save the contents of the buffer/postdisplay # Save the contents of the buffer/postdisplay
local orig_buffer="$BUFFER" local orig_buffer="$BUFFER"
local orig_postdisplay="$POSTDISPLAY" local orig_postdisplay="$POSTDISPLAY"
@ -304,6 +307,11 @@ _zsh_autosuggest_modify() {
_zsh_autosuggest_invoke_original_widget $@ _zsh_autosuggest_invoke_original_widget $@
retval=$? retval=$?
# Don't fetch a new suggestion if there's more input to be read immediately
if [[ $PENDING > 0 ]] || [[ $KEYS_QUEUED_COUNT > 0 ]]; then
return $retval
fi
# Optimize if manually typing in the suggestion # Optimize if manually typing in the suggestion
if [ $#BUFFER -gt $#orig_buffer ]; then if [ $#BUFFER -gt $#orig_buffer ]; then
local added=${BUFFER#$orig_buffer} local added=${BUFFER#$orig_buffer}