Динамические элементы в bash PS1 - PullRequest
5 голосов
/ 25 августа 2010

Я добавил следующее в мой файл ~ / .localsh, чтобы настроить приглашение bash при работе с git.

По сути, я хочу, чтобы текущая ветвь отображалась в моем терминале.Инструмент gitk показывает ветви с зеленым фоном и черным передним планом, вот что я пытаюсь сделать.

То, что у меня работает, работает, но когда я нажимаю стрелку вверх на клавиатуре, чтобы прокрутить предыдущие команды, этоперезаписывается.

Это было раньше, когда вы не заканчивали последовательность цветов с помощью [\ e [0m].Теперь это происходит со мной из-за вызова функции getgitbranch.Я думаю, что это как-то связано с тем, что терминал не знает, какова длина приглашения.

Итак, вот вопрос ... Как правильно использовать динамические элементы в моем приглашении bash, и чтобы его не закрывали, когдаЯ использую стрелки вверх?

function getgitbranch()
{
git branch | grep "^\*" | cut -c3-
}

function blabla()
{
PS1=""
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] "
PS1="$PS1\[\e[1;35m\][\[\e[0m\]"
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]"
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]"
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] "
export PS1
}

1 Ответ

5 голосов
/ 25 августа 2010

Снимите \[\] со всего $(getgitbranch). Символы, выводимые этой функцией, фактически занимают место на экране, поэтому вы хотите, чтобы Bash их учел. Использование \[\] говорит не считать символы, которые появляются внутри.

...