Мой ~/.xsession
файл имеет одну строку:
gnome-session --session=cinnamon
Я выполняю xrdp на сервере Linux Mint и соединяюсь с клиентом RDC. Похоже, что я сижу в рабочем столе; даже мой носатый сценарий работает на клиенте RDC.
Необходимо вложить невидимые части текста запроса в \[
и \]
.
Это используется bash
для вычисления длины полной подсказки, чтобы она могла определить, где будет находиться курсор после ее печати.
Например, цветовые экранирующие коды ANSI невидимы - они меняют цвет текста, который будет выводиться позже. Их нужно вложить следующим образом:
\e[1;35m
становится \[\e[1;35m\]
В своем обновлении вы пишете, что это помогло, но есть еще одна проблема:
.
экран не будет очищен в нужных местах, если использовать историю с Вверх/Вниз.
Это еще один аспект первой проблемы: неправильно рассчитана длина текста подсказки.
Давайте посмотрим на исправленный текст приглашения из вашей ссылки:
# login and computer name
PS1='[\e[\[1;37m\]\]\u\e[\[m\]\]@\e[\[1;32m\]\]\h\e[\[m\]\]] '
# date, time
PS1=$PS1'[\e[\[1;34m\]\]\D{%Y-%m-%d} \e[\[1;35m\]\]\t\e[\[m\]\]] '
# working directory and result of last command
PS1=$PS1'\e[\[1;33m\]\]\w\e[\[m\]\] \e[\[1;31m\]\]${?#0}\e[\[m\]\]\n '
# command prompt
PS1=$PS1'\e[\[1;36m\]\]\$\e[\[m\]\] '
Проблема в том, что \[
и \]
не вложены целые цветовые экранирующие последовательности:
.
Запрос начинается с
[\e[\[1;37m\]\]...
Последовательность цветного эвакуационного запроса в этом окне имеет вид \e[1;37m
. Таким образом, экранирующий символ \e
, а [
находится снаружи. По крайней мере, [
будет засчитан как видимый. Также есть два закрывающих \]
- это может не вызвать проблемы, но, по крайней мере, сбивает с толку - они не могут быть вложены.
Правильный способ записи:
[\[\e[1;37m\]...
У других цветных экранирующих последовательностей такая же проблема.
Вы должны немного модулизировать это - это значительно упростит отслеживание:
CS='\[\033[1;3' CE='m\]'
WT=${CS}7${CE} LB=${CS}6${CE} PR=${CS}5${CE} \
DB=${CS}4${CE} YL=${CS}3${CE} GN=${CS}2${CE} RD=${CS}1${CE}
CE='\[\033[m\]' CS=
Now you do your things:
# login and computer name
PS1="[${WT}\u${CE}@${GN}\h${CE}] "
...
And so on so on... Видите? Немного проще сказать, что происходит в этом направлении.