странное поведение предыдущей команды в byobu с временем, указанным в приглашении

Вопрос или проблема

Я использую byobu на 24.10, и наблюдаю очень странное поведение при использовании ctrl-P для отображения предыдущей команды, когда (1) предыдущая команда переносится на следующую строку, и (2) прошедшее время является частью подсказки.

Когда я это делаю, место, где я вижу курсор, и место, куда текст вставляется в редактируемую команду, различаются.

Например: у меня есть

[0.009s] me@machine:/tmp/a_directory_with_oh_such_a_very_long_name_five_boxing_wizards_jumped_quickly_4747474747363221987426874623948762387645239807423087$ ls file-1-with-a-long-name-
rurioewrewuioewrioweuoiwuepweoiurpoiuewr 
-rw-rw-r-- 1 me me 0 Dec  7 06:59 file-1-with-a-long-name-rurioewrewuioewrioweuoiwuepweoiurpoiuewr
me@machine:/tmp/a_directory_with_oh_such_a_very_long_name_five_boxing_wizards_jumped_quickly_4747474747363221987426874623948762387645239807423087$ 

Обратите внимание, что команда переносится после name- в строке, где я запускаю ls.

Теперь я хочу отредактировать эту команду и изменить что-то не в самом конце — скажем, мне нужно добавить флаг после команды. Я использую ctrl-P, затем ctrl-A, и теперь я вижу:

[0.009s] me@machine:/tmp/a_directory_with_oh_such_a_very_long_name_five_boxing_wizards_jumped_quickly_4747474747363221987426874623948762387645239807423087$ ls file-1-with-a-long-name-rurioewrewuioewrioweuoiwuepweoiurpoiuewr 
-rw-rw-r-- 1 me me 0 Dec  7 06:59 file-1-with-a-long-name-
rurioewrewuioewrioweuoiwuepweoiurpoiuewr
me@machine:/tmp/a_directory_with_oh_such_a_very_long_name_five_boxing_wizards_jumped_quickly_4747474747363221987426874623948762387645239807423087$ 423087$ ls file-1-with-a-long-name-
rurioewrewuioewrioweuoiwuepweoiurpoiuewr 

Посмотрите на последнюю строку: она показывает часть подсказки $ дважды:

...9807423087$ 423087$ ls file-1-with-a-long...`

Она повторяет часть “423087”. Более того, курсор находится на первом $. Если я двигаюсь вперед так, чтобы курсор оказался после ls, и редактирую, а затем нажимаю Enter, я вижу:

me@machine:/tmp/a_directory_with_oh_such_a_very_long_name_five_boxing_wizards_jumped_quickly_4747474747363221987426874623948762387645239807423087$ 423087$ ls -h ith-a-long-name-rurio
ewreurioewrewuioewrioweuoiwuepweoiurpoiuewr 
ls: cannot access 'file-1-w-h': No such file or directory
ls: cannot access 'ith-a-long-name-rurioewrewuioewrioweuoiwuepweoiurpoiuewr': No such file or directory

Я попытался добавить -h, но оболочка восприняла это как часть имени файла. То, что отображается, и то, что отправляется в оболочку, различаются.

Что вызывает это поведение, и как я могу это исправить? Это какая-то ошибка tmux? Связано ли это с странной вещью с прошедшим временем слева?

Это как-то связано с особыми подсказками PS0 и PS1 byobu. Если я запущу byobu-disable-prompt, я получу свою обычную подсказку bash, и все работает как ожидалось.

Таким образом, это кажется ошибкой в $PS1 этой подсказки, которая для меня выглядит следующим образом:

[0.011s] me@machine:~$ echo $PS1
\[\e[38;5;202m\]$(byobu_prompt_status)\[\e[00m\]$(byobu_prompt_runtime) \[\e[38;5;245m\]\u\[\e[00m\]@\[\e[38;5;172m\]\h\[\e[00m\]:\[\e[38;5;5m\]\w\[\e[00m\]$(byobu_prompt_symbol)

Что-то с управляющими последовательностями работает неправильно. Я не знаю что; если я погружусь глубже в эту тему, я окажусь в расплавленном железе ядра земли…

Просто отключение подсказки с помощью byobu-disable-prompt для меня вполне достаточно.

та же проблема. Возможное решение для получения чистой строки команды — редактировать строку в самом ее конце (иногда это очищает лишние части) или попробовать подняться на одну строку выше и затем спуститься обратно на одну строку. Надеюсь, автор(ы) скоро это исправят!

Ответ или решение

Проблема странного поведения предыдущей команды в Byobu при использовании комбинации клавиш Ctrl-P, что описано вами, действительно может вызывать дискомфорт при работе в терминале, особенно когда это связано с отображением времени выполнения и многострочным выводом. Давайте подробно разберем основные элементы вашей ситуации и возможные решения.

Контекст проблемы

Ваша проблема заключается в том, что при вызове предыдущей команды с помощью Ctrl-P происходит несоответствие между позицией курсора и фактическим местом вставки текста в команде. Это обуславливается спецификой настройки промпта, который используется в Byobu, и, скорее всего, связано с кодами escape, управляющими цветом и отображением текста.

Причины возникновения проблемы

  1. Строка состояния и кодирование цветов: Ваш текущий сырой формат $PS1 включает escape-последовательности, которые изменяют цвет текста и могут приводить к путанице в позиционировании курсора. При использовании многострочных команд длина строки на экране не соответствует фактической длине команды, учитывающей эти escape-последовательности.

  2. Многострочный вывод: Когда ваша команда выводится на несколько строк (например, из-за длинного имени файла), это может дополнительно усугубить проблему, так как текст, который вы видите, не соответствует фактической строке команды, как это интерпретирует оболочка.

  3. Отображение времени выполнения: Ваша строка имеет особый вид с отображенным временем выполнения, что также может влиять на форматирование вывода и позиционирование курсора.

Возможные решения

  1. Отключение специального промпта: Как вы уже заметили, отключение специального промпта с помощью команды byobu-disable-prompt позволяет вернуть стандартный Bash-промпт, что упростит ввод команд. Это может служить временным решением, если работа должна быть выполнена быстро и без ошибок.

  2. Настройка $PS1: Например, вы можете попробовать изменить последовательности escape таким образом, чтобы аккуратно визуализировать цвета, либо временно убрать их, чтобы устранить путаницу с курсором. Версия вашего $PS1 могла бы выглядеть следующим образом:

    PS1="\u@\h:\w$ "
  3. Обновление Byobu и оболочки: Убедитесь, что у вас установлены последние обновления Byobu и используемой оболочки (например, Bash). Иногда проблемы могут быть вызваны устаревшими версиями программного обеспечения, которые были исправлены в более новых релизах.

  4. Использование альтернативных методов редактирования: Если вы сталкиваетесь с этой проблемой, попробуйте перемещаться к концу строки перед редактированием команды. Кроме того, как было упомянуто, использование клавиши Up для возврата к предыдущей команде может иногда помочь «очистить» строку дисплея.

Заключение

Кратко подводя итог, основная причина вашего затруднения в Byobu заключается в конфликте между визуализацией вашего промпта и фактическим текстом команды, причем это наложение рендеринга возможно из-за escape-последовательностей. Предложенные решения могут помочь вам устранить текущие неудобства, однако обратите внимание на совместимость используемых параметров до окончательной настройки. Мы надеемся, что разработчики Byobu обратят внимание на этот вопрос и внесут необходимые исправления для улучшения пользовательского опыта.

Оцените материал
Добавить комментарий

Капча загружается...