Цвета терминала приводят к тому, что приглашение возвращается к началу строки

При использовании git я решил добавить .git-prompt.sh в мой файл.bashrc. Этот файл показывает мне название ветви, над которой я сейчас работаю. Я также решил добавить немного цвета.

if [ -f ~/.git-prompt.sh ]; then

    #include the branch detection file
    source ~/.git-prompt.sh

    #add the current branch in yellow
    export PS1='$(__git_ps1 "[\e[38;5;220m%s\x1b[0m]")'

    #make the rest of the text in the prompt gray
    PS1+="\e[38;5;245m\w$ "

    #set colors back to default
    PS1+="\033[0m"
fi

Использование любого терминала (gnome-terminal, xterm, quake) приводит к той же проблеме. Когда набранная строка становится слишком длинной,

подсказка возвращается к началу строки. Возможно, это связано с тем, что фактическая длина цветного текста намного больше.

Как получить терминальные цвета без этого сбоя?

1 ответ

Решение

Я думаю, что вам нужно написать

#add the current branch in yellow
export PS1='$(__git_ps1 "[\[\e[38;5;220m\]%s\[\x1b[0m\]]")'

#make the rest of the text in the prompt gray
PS1+="\[\e[38;5;245m\]\w$ "

#set colors back to default
PS1+="\[\033[0m\]"

Так что у тебя есть \[ а также \] окружающие все цветовые директивы.

Другие вопросы по тегам