fish-shell/share/functions/__fish_cancel_commandline.fish
Mahmoud Al-Qudsi 614c494859 Speed up default ^C action considerably
No more shelling out to external commands, no more loops, and no
conditionals past the initial check.
2020-06-29 19:41:33 -05:00

30 lines
1.2 KiB
Fish

function __fish_setup_cancel_text -v fish_color_cancel -v fish_color_normal
set -g __fish_cancel_text "^C"
if set -q fish_color_cancel
set __fish_cancel_text (echo -sn (set_color $fish_color_cancel) $__fish_cancel_text (set_color normal))
end
if command -sq tput
# Clear to EOL (to erase any autosuggestions)
set __fish_cancel_text (echo -sn $__fish_cancel_text (tput el; or tput ce))
end
end
__fish_setup_cancel_text
# This is meant to be bound to something like \cC.
function __fish_cancel_commandline
set -l cmd (commandline)
if test -n "$cmd"
echo -sn $__fish_cancel_text
# `commandline -L` prints the line the cursor is on (starting from the prompt), so move the cursor
# "to the end" then call `commandline -L` to get the total number of lines typed in at the prompt.
commandline -C 10000000
printf (string repeat -n (commandline -L) "\n")
commandline ""
emit fish_cancel
end
# cancel: Close the pager if it's open (#4298)
# repaint: Repaint even if we haven't cancelled anything so the prompt refreshes
# and the terminal scrolls to it.
commandline -f cancel -f repaint
end