Fix completion strategy killing other pty's

Only a problem in synchronous mode
This commit is contained in:
Eric Freese 2018-05-22 17:16:45 -06:00
parent 6ffaec725a
commit 3dbd9afaec
3 changed files with 37 additions and 4 deletions

View file

@ -1,10 +1,23 @@
describe 'a running zpty command' do
let(:before_sourcing) { -> { session.run_command('zmodload zsh/zpty && zpty -b kitty cat') } }
it 'is not affected by running zsh-autosuggestions' do
sleep 1 # Give a little time for precmd hooks to run
session.run_command('zpty -t kitty; echo $?')
context 'when sourcing the plugin' do
it 'is not affected' do
sleep 1 # Give a little time for precmd hooks to run
session.run_command('zpty -t kitty; echo $?')
wait_for { session.content }.to end_with("\n0")
wait_for { session.content }.to end_with("\n0")
end
end
context 'when using `completion` strategy' do
let(:options) { ["ZSH_AUTOSUGGEST_STRATEGY=completion"] }
it 'is not affected' do
session.send_keys('a').send_keys('C-h')
session.run_command('zpty -t kitty; echo $?')
wait_for { session.content }.to end_with("\n0")
end
end
end

View file

@ -9,6 +9,16 @@
_zsh_autosuggest_capture_setup() {
zmodload zsh/zutil # For `zparseopts`
# There is a bug in zpty module (fixed in zsh/master) by which a
# zpty that exits will kill all zpty processes that were forked
# before it. Here we set up a zsh exit hook to SIGKILL the zpty
# process immediately, before it has a chance to kill any other
# zpty processes.
zshexit() {
kill -KILL $$
sleep 1 # Block for long enough for the signal to come through
}
# Never group stuff!
zstyle ':completion:*' list-grouped false

View file

@ -506,6 +506,16 @@ zle -N autosuggest-toggle _zsh_autosuggest_widget_toggle
_zsh_autosuggest_capture_setup() {
zmodload zsh/zutil # For `zparseopts`
# There is a bug in zpty module (fixed in zsh/master) by which a
# zpty that exits will kill all zpty processes that were forked
# before it. Here we set up a zsh exit hook to SIGKILL the zpty
# process immediately, before it has a chance to kill any other
# zpty processes.
zshexit() {
kill -KILL $$
sleep 1 # Block for long enough for the signal to come through
}
# Never group stuff!
zstyle ':completion:*' list-grouped false