mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-28 13:53:10 +00:00
Handle exit
in keybindings immediately
This simply checks if the parser requested exit after running any binding scripts (in read_normal_chars). I think this means we no longer need the `exit` bind function. Fixes #7967.
This commit is contained in:
parent
28b17879c7
commit
202e5e53d5
2 changed files with 21 additions and 0 deletions
|
@ -3932,6 +3932,11 @@ maybe_t<wcstring> reader_data_t::readline(int nchars_or_0) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we ran `exit` anywhere, exit.
|
||||||
|
exit_loop_requested |= parser().libdata().exit_current_script;
|
||||||
|
parser().libdata().exit_current_script = false;
|
||||||
|
if (exit_loop_requested) continue;
|
||||||
|
|
||||||
if (!event_needing_handling || event_needing_handling->is_check_exit()) {
|
if (!event_needing_handling || event_needing_handling->is_check_exit()) {
|
||||||
continue;
|
continue;
|
||||||
} else if (event_needing_handling->is_eof()) {
|
} else if (event_needing_handling->is_eof()) {
|
||||||
|
|
|
@ -317,3 +317,19 @@ sendline('bind \cz "echo bound ctrl-z"')
|
||||||
expect_prompt()
|
expect_prompt()
|
||||||
send("\x1A")
|
send("\x1A")
|
||||||
expect_str("bound ctrl-z")
|
expect_str("bound ctrl-z")
|
||||||
|
|
||||||
|
# Check that the builtin version of `exit` works
|
||||||
|
# (for obvious reasons this MUST BE LAST)
|
||||||
|
sendline('function myexit; echo exit; exit; end; bind \cz myexit')
|
||||||
|
expect_prompt()
|
||||||
|
send("\x1A")
|
||||||
|
expect_str("exit")
|
||||||
|
|
||||||
|
for t in range(0, 5):
|
||||||
|
if not sp.spawn.isalive():
|
||||||
|
break
|
||||||
|
# This is cheesy, but on CI with thread-sanitizer this can be slow enough that the process is still running, so we sleep for a bit.
|
||||||
|
time.sleep(1)
|
||||||
|
else:
|
||||||
|
print("Fish did not exit via binding!")
|
||||||
|
sys.exit(1)
|
||||||
|
|
Loading…
Reference in a new issue