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