Я случайно испортил свой терминал tmux после того, как cat
заполнил бинарный файл. Теперь мой tmux
испорчен. Отсоединение и повторное присоединение не помогают, равно как и перерисовка (Cb r). Запуск reset
только перерисовывает активную панель, а не остальные. Бег ssty sane
внутри или снаружи tmux
тоже не помогает.
В каждой панели у меня есть нормальная обратная связь с тем, что я печатаю (первоначальный вызов reset
сразу после того, как терминал был испорчен, решил это), но я не могу исправить строку состояния.
В gnome-terminal
каждое обновление статус-бара приводит к статус-бара расти (см скриншот выше). Например, это происходит, когда я запускаю новое приложение, когда я переключаю панели или когда я изменяю размер панели. Принудительное перерисовывание ( C-b r
путем запуска reset
или через меню терминала gnome) сокращает строку состояния до одной строки, но она остается поврежденной.
В xterm
, строка состояния остается в пределах одной строки, но она остается поврежденной, как показано на рисунке.
Я использую tmux 1.5.
- Как мне исправить мой
tmux
-терминал?
В этом отчете об ошибке за 2008 год описана та же проблема, но она была помечена как исправленная. Я не знаю, в какой версии это было исправлено, но в tmux 1.5 должно быть исправление 2008 года.
Control
+b
+,:
а затемset -g status-right "#H"
установить статус-право на имя хоста.Ответы:
Попробуйте переименовать окно 4
(Это запятая в середине)
Или: Control+b
:rename-window myNewname
источник
ctrl+u
, так что полная последовательностьctrl+b , ctrl+u newname
byobu
также (f8, <newname>
)Control-u
нужно?Control-,
уже переименование верно? Хотя я могу подтвердить, что это было необходимо в моем случае, это какой-то символ сброса?Вам нужно две последовательности команд для очистки беспорядка:
Сначала запустите это в искаженном окне (это работает, даже когда вы находитесь
ssh
):stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh
Затем запустите это на компьютере, который работает
tmux
(он работает внутри и снаружиtmux
):tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done
Подробно объяснил
Это было собрано для решения всех битов, найденных в других ответах и комментариях. Там в настоящее время кажется только второстепенный бит со второй командой. (См. Ниже «отсутствующий бит»).
Чтобы понять, как это работает, давайте сначала убьем строку состояния
tmux
иtty
. После этого мы исправляем это снова, используя метод, который должен быть всегда доступен (в отличие от командыreset
).Как сделать
tmux
терминал (предполагаетUTF-8
) непригоднымРазъяснение:
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, но интерактивные команды, какvim
обычно, устанавливают это.)Теперь наведи порядок
Разъяснение:
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
настройками:Либо сделайте это в
tmux
командной строке, которая может быть достигнута в текущем окне с помощью «Escape»:
(где «Escape» - вашtmux
командный ключ), а затем введите команду.Или извините
tmux set-window-option automatic-rename on
в своем текущем терминале, но это терпит неудачу, если вы не находитесь непосредственно на нужном уровне оболочки, например, это не работает вsudo
илиssh
.Или откройте другое окно в текущем
tmux
сеансе и выполните следующую команду:Или откройте другую оболочку на компьютере, который работает,
tmux
и выполните следующую команду (это за пределами tmux):PS: Спасибо всем, кто помог собрать это решение.
источник
uname -n
вместоhostname -s
.hostname
опасен вroot
контексте, так как вы можете в конечном итоге переименовать свой хост в-s
старшей Linux / Unix, гдеhostname
не используются опции.stty sane
Часть помогла мне , когда мой терминал облажался и ничего не показывает. Спасибо!set-window-option automatic-rename
.Конкретная проблема, которую вы видите, связана с именем / заголовком окна 4. Сочетание слишком длинных (очевидно) и содержащих странные символы, которые заставляют tmux измерить его как более короткий (поэтому он не может правильно ограничить строку состояния). на ширину экрана) Я не уверен, как сбросить его (на моем он отслеживает название процесса переднего плана), возможно, вам придется закрыть окно.
источник
^b - ,
Ctrl
-b
тогда,
.Backspace
минуту, чтобы очистить текущее имя. Для меня визуальная обратная связь со временем прояснила, что все старое имя было стерто.Ctrl-b
:
переименованное окно <имя идет сюда>; здесь используется система команд tmux вместо сочетания клавиш для этой команды.просто сделай это
$ reset && tmux rename-window <new_window_name>
источник
исправил это для меня, когда что-то кроме имени окна было повреждено, и я не мог понять, что это было.
источник
tmux
может составлять только часть проблемы. Возможно, вам придется вызыватьstty sane
из командной строки. Это сбрасывает драйверы TTY в ядре на некоторый набор значений по умолчанию, которые обычно позволяют вам продолжить. Если драйверы TTY испорчены достаточно, возможно, вам придется набиратьstty sane
«вслепую», то есть без обратной связи на экране.источник
stty sane
тоже не решает проблему. У меня есть обратная связь на экране, в каждой изtmux
панелей я могу печатать и получать обратную связь как обычно, но как только tmux нужно что-то нарисовать (например, запустить новое приложение, переключить или изменить размеры панелей), строка состояния переместится в панели. ...Попробуйте перезагрузить ваш конфигурационный файл?
Ctrlb, тогда:
:source-file ~/.tmux.conf
источник
чтобы решить проблему для меня:
Я просто убил проблемную панель и окно и создал новое окно и панель.
В панели вопроса CTRL+ AXи CTRL+ AC.
источник