Рейтинг:1

Терминал XFCE - изменение цвета подсказки ввода искажает строку ввода

флаг de

Этот вопрос является продолжением ответа на этот вопрос об изменении цвета подсказки пользовательского ввода в терминале XFCE: Терминал Ubuntu (Xfce): изменение цвета шрифта команд ввода по сравнению с выходным текстом

Поскольку мне не разрешено комментировать там (минимум 50 репутации), мне пришлось открыть новый вопрос.

После ответа я использовал следующую команду:

PS1='\e[1;36m\u@\h \W]\$\e[0m '

Это сохраняет формат по умолчанию, но меняет цвет на голубой, как и ожидалось.

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

Скажи, что я хочу сделать:

$ cd /some/путь/к/каталогу

но когда я набираю это становится таким:

$ cd /some/pa/directoryath/to

если я наберу ввод, он все равно будет правильно читать команду, это просто неправильное отображение. Когда это произойдет, если я попытаюсь использовать backspace, это превратится в что-то вроде этого:

$ cd /some/pa/directoryath/to
$ cd /some/pa/directo
$ cd /some/pa -------- на данный момент я больше ничего не могу стереть,
                           на дисплее некоторые символы все еще 
                           затяжной, но если я наберу ввод, в строке ввода ничего не будет

Другой пример, скажем, что у меня отображается следующее:

$ лс
папка1 папка2 папка3 папка4

и теперь я хочу ввести какую-то другую команду, тогда может произойти следующее:

$ лс
папка1 папка2 папка3 каталог
$ cd /some/path/to/a/di

Еще раз, если я набираю ввод, ввод распознается правильно, но дисплей испорчен.

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

sudodus avatar
флаг jp
Я думаю, что ваша проблема связана с тем, как последовательности ANSI интерпретируются и взаимодействуют с другими способами связи с интерфейсом командной строки.Я заметил, что эта ошибка вызывает проблемы, например, когда у вас есть длинная командная строка, которая достигает правой границы окна/экрана и заворачивается. - Я использую этот способ, чтобы получить цветную подсказку, и я живу с проблемой, потому что цветная подсказка очень помогает.
bjorn avatar
флаг de
Если бы это произошло только во время обертывания, я бы тоже мог с этим жить. Но как сейчас, почти каждый раз, когда я нажимаю кнопку «вверх», она ломается, и каждая десятая команда или около того, то есть короткая, также будет иметь проблемы. В том виде, в каком он есть сейчас, я, к сожалению, не могу его использовать... Однако, если это ошибка, я думаю, что правильным подходом было бы подать отчет об ошибке.
sudodus avatar
флаг jp
Какую версию Ubuntu, bash и эмулятора терминала вы используете? Вы пробовали другой эмулятор терминала?
Рейтинг:0
флаг jp

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

Пожалуйста, попробуйте этот, который я использую

если [ "$USER" = root ]; тогда
    PS1='\[\033[01;31m\]$(строка статистики)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h \[\033[00м\] \[\033[01;34м\]\w\[\033[00м\] \$ '
еще
    PS1='\[\033[01;31m\]$(строка статистики)\[\033[00m\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h \[\033[00м\] \[\033[01;34м\]\w\[\033[00м\] \$ '
фи

и если он работает, вы можете поместить его в свой ~/.bashrc хотя бы для интерактивных оболочек. я использую

случай "$TERM" в
xterm-цвет)
....

чтобы решить, когда его использовать, и вы можете проверить что-то, что соответствует вашей настройке.


Изменить: добавить функцию для создания строка статистики прежде чем установить подсказку в ~/.bashrc

строка статистики {
РК=$?
  если [ "0" != $RC ]; тогда
    printf "[$RC]"
  фи
}
bjorn avatar
флаг de
Спасибо! Мне пришлось удалить $(statstring), но теперь он работает, как и ожидалось. Что именно было в моей первоначальной попытке, что вызвало проблему? н.б. У меня возникла такая же проблема с предложениями в связанном вопросе.
sudodus avatar
флаг jp
Я не уверен, почему ваша старая подсказка пошла не так. Он отличается от моего в конце (порядок между символом $ и последовательностью ANSI), может быть, поэтому он идет не так. Кроме того, последовательности ANSI немного отличаются, что может привести к другим результатам. -- Пожалуйста, отредактированный ответ и попробуйте использовать `statstring`.
Рейтинг:0
флаг cn

Вам нужно заключить управляющие последовательности терминала, и только те, которые находятся между \[ и \].

Смотрите в битьсправочной странице, в разделе "ЗАПРОСЫ".

Вместо

PS1='\e[1;36m\u@\h \W]\$\e[0m '

ты должен написать

PS1='\[\e[1;36m\]\u@\h \W]\$\[\e[0m\] '

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.