mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-18 20:53:40 +08:00
a19ff4989a
Commita583fe723
("commandline -f foo" to skip queue and execute immediately, 2024-04-08) fixed the execution order of some bindings but was partially backed out in5ba21cd29
(Send repaint requests through the input queue again, 2024-04-19) because repainting outside toplevel yields surprising results (wrong $status etc). Transient prompts wants to first repaint and then execute some more readline commands, all within a single binding. This was broken by the second commit because that one defers the repaint until after the binding has finished. Work around this problem by deferring input events again while a readline event was queued. This is closest to the historical behavior. The implementation feels hacky; we might find odd situations. For example, commandline -f repaint end-of-line set token (commandline -t) sets the wrong token. Probably not a very important case. We could throw an error or make it work by letting "commandline -t" drain the input queue. That seems too complicated, better change repaints to not use the input queue (and fake $status etc). Let's try to do that in future. Closes #10492
24 lines
499 B
Fish
24 lines
499 B
Fish
#RUN: %fish %s
|
|
#REQUIRES: command -v tmux
|
|
|
|
set -g isolated_tmux_fish_extra_args -C '
|
|
function fish_prompt
|
|
if set -q transient
|
|
printf "> "
|
|
set --erase transient
|
|
else
|
|
printf "> full prompt > "
|
|
end
|
|
end
|
|
bind enter "set transient true; commandline -f repaint execute"
|
|
'
|
|
|
|
isolated-tmux-start
|
|
|
|
isolated-tmux send-keys 'echo foo' Enter
|
|
tmux-sleep
|
|
isolated-tmux capture-pane -p
|
|
# CHECK: > echo foo
|
|
# CHECK: foo
|
|
# CHECK: > full prompt >
|