mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2024-12-23 10:21:15 +01:00
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:
parent
c52c428793
commit
e1959d0f61
3 changed files with 40 additions and 0 deletions
24
spec/integrations/zle_input_stack_spec.rb
Normal file
24
spec/integrations/zle_input_stack_spec.rb
Normal 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
|
|
@ -15,6 +15,9 @@ _zsh_autosuggest_clear() {
|
|||
_zsh_autosuggest_modify() {
|
||||
local -i retval
|
||||
|
||||
# Only added to zsh very recently
|
||||
local -i KEYS_QUEUED_COUNT
|
||||
|
||||
# Save the contents of the buffer/postdisplay
|
||||
local orig_buffer="$BUFFER"
|
||||
local orig_postdisplay="$POSTDISPLAY"
|
||||
|
@ -26,6 +29,11 @@ _zsh_autosuggest_modify() {
|
|||
_zsh_autosuggest_invoke_original_widget $@
|
||||
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
|
||||
if [ $#BUFFER -gt $#orig_buffer ]; then
|
||||
local added=${BUFFER#$orig_buffer}
|
||||
|
|
|
@ -293,6 +293,9 @@ _zsh_autosuggest_clear() {
|
|||
_zsh_autosuggest_modify() {
|
||||
local -i retval
|
||||
|
||||
# Only added to zsh very recently
|
||||
local -i KEYS_QUEUED_COUNT
|
||||
|
||||
# Save the contents of the buffer/postdisplay
|
||||
local orig_buffer="$BUFFER"
|
||||
local orig_postdisplay="$POSTDISPLAY"
|
||||
|
@ -304,6 +307,11 @@ _zsh_autosuggest_modify() {
|
|||
_zsh_autosuggest_invoke_original_widget $@
|
||||
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
|
||||
if [ $#BUFFER -gt $#orig_buffer ]; then
|
||||
local added=${BUFFER#$orig_buffer}
|
||||
|
|
Loading…
Reference in a new issue