mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-18 20:53:40 +08:00
2dbaf10c36
Commitba67d20b7
(Refresh TTY timestamps after nextd/prevd, 2024-10-13) wasn't quite right because it also needs to fix it for arbitrary commands. While at it, do this only when needed: 1. It seems to be only relevant for multiline prompts. Note that we can wait until after evaluation to check if the prompt is multiline, because repaint events go through the queue, see5ba21cd29
(Send repaint requests through the input queue again, 2024-04-19). 2. When the binding doesn't execute any external command, we probably don't need to fix up whatever the user printed. If they actually wanted to show output and print another prompt, they should currently use "__fish_echo", to properly support multiline prompts. Bindings should produce no other output. What distinguishes external programs is that they can trigger this issue even if they don't produce any output that remains visible in fish, namely by using the terminal's alternate screen. Would be nice if we could get rid of __fish_echo; I'm not yet sure how. Fixes #10800
62 lines
1.6 KiB
Fish
62 lines
1.6 KiB
Fish
#RUN: %fish %s
|
|
#REQUIRES: command -v tmux && ! tmux -V | grep -qE '^tmux (next-3.4|3\.[0123][a-z]*($|[.-]))'
|
|
#REQUIRES: command -v less
|
|
|
|
isolated-tmux-start
|
|
|
|
isolated-tmux send-keys '
|
|
function fish_prompt
|
|
printf "prompt-line-1\\nprompt-line-2> "
|
|
commandline -f repaint
|
|
end
|
|
' Enter
|
|
isolated-tmux send-keys C-l ': 1' Enter
|
|
tmux-sleep
|
|
isolated-tmux send-keys ': 3' Enter
|
|
tmux-sleep
|
|
isolated-tmux send-keys ': 5' Enter
|
|
tmux-sleep
|
|
|
|
# Screen looks like
|
|
|
|
# [y=0] prompt-line-1
|
|
# [y=1] prompt-line-2> : 1
|
|
# [y=2] prompt-line-1
|
|
# [y=3] prompt-line-2> : 3
|
|
# [y=4] prompt-line-1
|
|
# [y=5] prompt-line-2> : 5
|
|
# [y=6] prompt-line-1
|
|
# [y=7] prompt-line-2>
|
|
|
|
isolated-tmux copy-mode
|
|
isolated-tmux send-keys -X previous-prompt
|
|
isolated-tmux send-keys -X previous-prompt
|
|
tmux-sleep
|
|
isolated-tmux display-message -p '#{copy_cursor_y} #{copy_cursor_line}'
|
|
# CHECK: {{[46]}} prompt-line-1
|
|
|
|
# Test that the prevd binding does not break the prompt.
|
|
isolated-tmux send-keys Escape
|
|
tmux-sleep
|
|
isolated-tmux send-keys M-left
|
|
tmux-sleep
|
|
isolated-tmux capture-pane -p | tail -n 5
|
|
# CHECK: prompt-line-2> : 5
|
|
# CHECK: prompt-line-1
|
|
# CHECK: prompt-line-2>
|
|
# CHECK:
|
|
# CHECK:
|
|
|
|
# Test repainint after running an external program that uses the alternate screen.
|
|
isolated-tmux send-keys 'bind ctrl-r "echo | less +q; commandline \'echo Hello World\'"' Enter C-l \
|
|
isolated-tmux send-keys C-r
|
|
tmux-sleep
|
|
isolated-tmux send-keys Enter
|
|
tmux-sleep
|
|
isolated-tmux capture-pane -p
|
|
# CHECK: prompt-line-1
|
|
# CHECK: prompt-line-2> echo Hello World
|
|
# CHECK: Hello World
|
|
# CHECK: prompt-line-1
|
|
# CHECK: prompt-line-2>
|