tmux status-bar поврежден после обращения к двоичному файлу, как сбросить?

Я случайно закрутил терминал tmux после записи двоичного файла. Теперь мой tmux испорчен. Отсоединение и повторное присоединение не помогают, а также перерисовывают (Cb r). Запуск reset только перерисовывает активную панель, а не остальную. Выполнение ssty sane как внутри, так и вне tmux тоже не помогает.

tmux испортился

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

В gnome-terminal каждое обновление до строки состояния приводит к тому, что индикатор состояния увеличивается (см. Скриншот выше). Например, это происходит, когда я запускаю новое приложение при переключении панелей или при изменении размера панели. Принуждение перерисовки (с помощью Cb r , с помощью reset или через меню gnome-терминала) сжимает строку состояния до одной строки, но остается поврежденной.

В xterm строка состояния остается в одной строке, но она остается поврежденной, как показано на рисунке.

Я использую tmux 1.5.

  • Как исправить мой tmux -терминал?

Этот отчет об ошибках 2008 года, похоже, описывает ту же проблему, но был отмечен как фиксированный. Я не знаю, в какой версии он был исправлен, но tmux 1.5 должен включить исправление с 2008 года.

Попробуйте переименовать окно 4

  • Переключиться на окно 4: Управление + b 4
  • Переименовать окно: Control + b , Control + u myNewname

(Это запятая посередине)

Или: Control + b :rename-window myNewname

Конкретная проблема, которую вы видите, связана с именем / названием окна 4. Комбинация слишком длинная (очевидно) и содержащая странные символы, которые заставляют tmux измерять ее как более короткую (чтобы она не смогла должным образом ограничить строку состояния по ширине экрана) Я не уверен, как его сбросить (по моему он отслеживает имя процесса переднего плана), возможно, вам придется закрыть окно.

Для очистки беспорядка нужны две последовательности команд:

Сначала запустите это в искаженном окне (это работает, даже когда вы находитесь в ssh ):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

Затем запустите это на компьютере, который запускает tmux (он работает внутри и вне tmux ):

Следующая команда влияет на все экземпляры tmux , которые могут изменить статус слева больше, чем текущее окно. Если вам не нужна эта функция, оставьте ее.

tmux list-windows -a | while IFS=: read -rabc; do tmux set-window-option -t "$a:$b" automatic-rename on; done

Подробно объяснено

Это было собрано для решения всех битов, найденных в других ответах и ​​комментариях. В настоящее время кажется, что осталось только небольшая битка со второй командой. (См. Ниже «Отсутствующий бит»).

Чтобы понять, как это работает, позвольте нам сначала убить строку состояния tmux и tty . Впоследствии мы исправляем его снова, используя метод, который должен быть всегда доступен (в отличие от reset ).

Как сделать терминал tmux (предполагается UTF-8 ) непригодным для использования

 stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217' 

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

Разъяснение:

  • stty -echo убивает ответ типа терминала

  • printf '\016' делает SO , поэтому вы находитесь на альтернативном наборе символов

  • printf '\033]2;%s\007' 'right status text' устанавливает правильный статус, в этом случае $'\355 ', который отображает ошибку представления

  • printf '\033k%2000s\033\\' $'\302\217' задает имя заголовка окна

Это может быть комбинация, которую вы можете увидеть на терминале после того, как некоторая интерактивная команда разбилась и упала обратно в оболочку. (С /bin/cat вы не можете достигнуть stty -echo IMHO)

Теперь очистите этот беспорядок

 stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh 

Примечание. Если вы используете копию и вставку, вы, вероятно, не увидите свою пасту, если вы использовали указанную выше команду, чтобы испортить ваш tty . Следовательно, просто вслепую нажмите клавишу Enter после вставки этого.

Разъяснение:

  • stty sane устанавливает «нормальные» терминальные параметры, поэтому вы получаете свое эхо при наборе текста

  • printf '\033k%s\033\\' "$(basename "$SHELL")" возвращает заголовок окна в нормальное состояние. Вы можете использовать tmux rename-window "$(basename "$SHELL")" , но tmux rename-window ограничен tmux где всегда работает escape-последовательность.

  • printf '\033]2;%s\007' "$(uname -n)" сбрасывает статус-право, которое будет отображаться по умолчанию. (Обратите внимание, что вы не должны использовать tmux set status-right "something" , потому что он просто выводит pane title который получил коррумпирован, поэтому status-right просто раскрывает ошибку представления. Также обратите внимание, что я не нашел команду tmux для установки заголовок панели напрямую.)

  • tput reset сбрасывает терминал, на всякий случай, когда это было испорчено

  • tmux refresh обновляет экран, чтобы избавиться от других обломков, которые могли бы появиться

Отсутствующий бит

printf '\033k%s\033\\' "$(basename "$SHELL")" теряет стандартную способность tmux представлять текущую команду в левой статусной области. После того как printf '\033k%s\033\\' "something" было выполнено, эта способность потеряна, и я еще не нашел хорошего способа вернуть ее, как это было раньше.

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

 set-window-option automatic-rename on 
  • Либо сделайте это в командной строке tmux которая может быть достигнута в текущем окне с помощью «Escape» : (где «Escape» – это ваш командный ключ tmux ), а затем введите команду.

  • Или вы можете включить tmux set-window-option automatic-rename on в текущем терминале, но это не удается, если вы не находитесь на правильном уровне оболочки, например, он не работает в sudo или ssh .

  • Или откройте другое окно в текущем сеансе tmux и выполните следующую команду:

    для a в tmux list-windows | sed 's/:.*// tmux list-windows | sed 's/:.*// ; do tmux set-window-option -t "$ a" автоматическое переименование; сделанный

  • Или откройте другую оболочку на компьютере, на котором запущен tmux и выполните следующую команду (это вне tmux):

    tmux list-windows -a | в то время как IFS =: read -rabc; do tmux set-window-option -t "$ a: $ b" automatic-rename on; сделанный

PS: Спасибо всем, кто помог собрать это решение.

 tmux set-option -g status off && tmux set-option -g status on 

исправил это для меня, когда что-то, кроме имени окна, было повреждено, и я не мог понять, что это было.

просто сделайте это $ reset && tmux rename-window <new_window_name>

tmux может быть только частью проблемы. Возможно, вам придется вызвать stty sane в командной строке. Это приводит к сбросу встроенных драйверов TTY к некоторым наборам значений по умолчанию, которые обычно позволяют вам продолжить. Если драйверы TTY достаточно перепутаны, вам, возможно, придется вводить stty sane «blind», то есть без обратной связи на экране.

Попробуйте перезагрузить конфигурационный файл?

Ctrl b , затем:: :source-file ~/.tmux.conf

исправить проблему для меня:

Я просто убил панель задач и окно и создал новое окно и панель.

В области проблем CTRL + A X и CTRL + A C.