Непечатаемые символы, обнаруживающиеся в терминальной подсказке

Без цвета моя подсказка похожа на это:

[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[0] [dimo414@dimo414:/tmp]\n\$

Я добавляю некоторый цвет и \[...\] разграничьте его:

[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\[\e[32m\]0\[\e[0m\]] [\[\e[34m\]dimo414\[\e[0m\]\[\e[32m\]@dimo414\[\e[0m\]:\[\e[94m\]/tmp\[\e[0m\]]\n\$

Original Prompt

Большие взгляды! Но BashFAQ указывает что:

\[\] являются только особенными, когда Вы присваиваете PS1 при печати их в функции, которая работает, когда подсказка отображена, это не работает. В этом случае необходимо использовать байты \001 и \002

Однако, когда я изменяю свою подсказку для использования \001 и \002 вместо этого, я получаю это (StackExchange, кажется, правильно представляет их как символы нулевой ширины, но они там):

[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\e[32m0\e[0m] [\e[34mdimo414\e[0m\e[32m@dimo414\e[0m:\e[94m/tmp\e[0m]\n\$

New, broken prompt

Эта та же подсказка - с \001...\002 - взгляды исправляют в iTerm2 на OSX.

Я использую эти две команды для выхода из цветных последовательностей:

# Previously (works)
printf '\[%s\]' "$(color "$@")"

# Currently (doesn't work on Ubuntu)
printf '\001%s\002' "$(color "$@")"

Что должно я сделать вместо второй опции для использования \001...\002 на Ubuntu?

2
задан 5 May 2016 в 01:05

0 ответов

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

Похожие вопросы: