Skip to content

d3ceba107e88b6c6e1a0358ebcb30366aeef653f causes issues with repainting multi-line prompt #8163

@nathanchance

Description

@nathanchance

I am using a slightly modified version of hydro, which updates the git branch and ahead/behind in the background using a universal variable and --on-variable function to repaint the command line.

After d3ceba1, the prompt does not always repaint properly (8860fceeae0cd65ed5a90e8cb28324634aec03e2 is a revert of d3ceba1 on master):

asciicast

A simple reproducer (works well with a repo that frequently rebases such as linux-next):

$ cat $HOME/.config/fish/conf.d/prompt.fish
if status is-interactive
        set --global _hydro_git _hydro_git_$fish_pid

        function $_hydro_git --on-variable $_hydro_git
                commandline --function repaint
        end

        function _hydro_prompt --on-event fish_prompt
                fish --private --command "
                        ! command git --no-optional-locks rev-parse 2>/dev/null && set $_hydro_git && exit

                        command git rev-list --count --left-right @{upstream}...@ 2>/dev/null | read behind ahead

                        switch \"\$behind \$ahead\"
                                case \" \" \"0 0\"
                                case \"0 *\"
                                        set upstream \" \$ahead\"
                                case \"* 0\"
                                        set upstream \" \$behind\"
                                case \*
                                        set upstream \" \$ahead \$behind\"
                        end
                        set --universal $_hydro_git \"\$upstream \"
                " &
        end
end

$ cat $HOME/.config/fish/functions/fish_prompt.fish
function fish_prompt
        echo
        echo "$PWD$$_hydro_git"
        echo '$ '
end

The 486 1701 in the recording should disappear after the git reset --hard origin/master but it does not. My bisect log in case it matters:

# bad: [d0593b9b2bcbe6ebe224ee8eeffb985087f64b1e] Release 3.3.0
# good: [0c2cbfc01f686f11d0015c36ba66e7144794f537] Release 3.2.2
git bisect start '3.3.0' '3.2.2'
# good: [2e9dab71a3432913cf6ac0422c3821601290895d] __fish_apropos: Don't overwrite $dir
git bisect good 2e9dab71a3432913cf6ac0422c3821601290895d
# bad: [99284049207b60abce4fa684335a2e93f973a811] Remove some static_asserts out of the common.h header
git bisect bad 99284049207b60abce4fa684335a2e93f973a811
# good: [6ab794562380f92a045c0e705e91d1de6ba1bbce] Mild refactoring of universal variables
git bisect good 6ab794562380f92a045c0e705e91d1de6ba1bbce
# good: [af84c352826ffe80cb8831531bb54c77da1e3663] docs: A bit more on autoloading
git bisect good af84c352826ffe80cb8831531bb54c77da1e3663
# bad: [e19ccc8a7a247a1df36c5388ba59b9c42922854b] CHANGELOG
git bisect bad e19ccc8a7a247a1df36c5388ba59b9c42922854b
# good: [60d75e9aa05aa9c155c155ed898d22bbab0a6644] Remove proc_create_event
git bisect good 60d75e9aa05aa9c155c155ed898d22bbab0a6644
# bad: [d3ceba107e88b6c6e1a0358ebcb30366aeef653f] Clear to eol before outputting line in multi-line prompt
git bisect bad d3ceba107e88b6c6e1a0358ebcb30366aeef653f
# good: [c0b33774ca07527f290d9af49c0784841034b24f] Update docs on detecting fish_private_mode
git bisect good c0b33774ca07527f290d9af49c0784841034b24f
# first bad commit: [d3ceba107e88b6c6e1a0358ebcb30366aeef653f] Clear to eol before outputting line in multi-line prompt

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething that's not working as intended

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions