Как правильно использовать смайлики шириной в два символа в моей подсказке bash? - PullRequest
0 голосов
/ 31 января 2019

Я хочу использовать смайлики с американским флагом в моем приглашении bash (т.е. переменная окружения PS1).Однако американский флаг emoji заставляет оконечный курсор смещать дополнительный символ вправо.

?? состоит из двух символов Юникода, ic и ?.Я полагаю, что терминал преобразует это в моно-символ эмодзи (флаг), оставляя место для двух персонажей.Как мне достичь ожидаемой позиции курсора?

Я хочу:
?? Desktop akirna ? ls|

Я получаю:
?? Desktop akirna ? ls | << <em>странное смещение пространства перед курсором

My ~/.bash_profile равно:

export PS1='??  \W \u ? '

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Я работал над этим, преобразовав символ в гекс, а затем поместив маркеры нулевой ширины вокруг второй части символа

, поэтому для ?? мы получаем

PS1='\xf0\x9f\x87\xba\[\xf0\x9f\x87\xb8\] '
0 голосов
/ 16 апреля 2019

Обновленный ответ

То, как вы устанавливаете подсказку, не оценивает escape-символы.Добавьте $ перед строкой, чтобы вычислить управляющие коды:

pompt$ export PS1='XY \x08: '
XY \x08: echo "Well that didn't work..."

Должно стать:

pompt$ export PS1=$'XY \x08: '
XY: echo "Escape code success!"

(см. Комментарий Чарльза Даффи к этому ответу, почему я удалил export.)

В приведенном выше примере в подсказке указываются символы X, Y, [пробел], [backspace], [двоеточие], в результате чего отображается только «XY:».

В моей системе флаг отображается как два символа (? и ?), поэтому я не могу проверить это, но я думаю, что добавление возврата (\ x08) должно работать для вас:

PS1=$'??  \\W \\u ?\x08'

Замечания по поводу правок

В моем первоначальном ответе предлагалось использовать подоболочку:

export PS1=$(printf "XY \x08")

Большое спасибо Чарльзу Даффи за его вклад ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...