mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-02-27 14:53:27 +08:00

Another consequence of a583fe723 ("commandline -f foo" to skip queue and execute immediately, 2024-04-08) is that "commandline -f repaint" will paint the prompt with the current value of $status which might be set from a shell command in a the currently executing binding, instead of waiting for the top-level status. This is wrong, at least historically. It surfaces in bindings like alt-w which always paint a status value of [1] when on single-lines commandlines. Another regression is that a redundant repaint in a signal handler outputs an extra prompt. Fix both by making repaint commands go over the input queue again. This way, they are always run with a good commandline state. There is no need to repaint immediately because I don't think anyone has a data dependency on it (we currently don't expose the prompt string), it's only for rendering.
39 lines
899 B
Fish
39 lines
899 B
Fish
#RUN: %fish %s
|
|
#REQUIRES: command -v tmux
|
|
|
|
set -g isolated_tmux_fish_extra_args -C '
|
|
function fish_prompt
|
|
printf "prompt $status_generation> <status=$status> <$prompt_var> "
|
|
set prompt_var ''
|
|
end
|
|
function on_prompt_var --on-variable prompt_var
|
|
commandline -f repaint
|
|
end
|
|
function token-info
|
|
__fish_echo echo "current token is <$(commandline -t)>"
|
|
end
|
|
bind ctrl-g token-info
|
|
'
|
|
|
|
isolated-tmux-start
|
|
|
|
isolated-tmux capture-pane -p
|
|
# CHECK: prompt 0> <status=0> <>
|
|
|
|
set -q CI && set sleep sleep 10
|
|
set -U prompt_var changed
|
|
tmux-sleep
|
|
isolated-tmux send-keys Enter
|
|
# CHECK: prompt 0> <status=0> <changed>
|
|
|
|
isolated-tmux send-keys echo Space 123
|
|
tmux-sleep
|
|
isolated-tmux send-keys C-g
|
|
|
|
# CHECK: prompt 0> <status=0> <> echo 123
|
|
# CHECK: current token is <123>
|
|
# CHECK: prompt 0> <status=0> <> echo 123
|
|
tmux-sleep
|
|
|
|
isolated-tmux capture-pane -p
|