tmux смужка стану пошкоджена після введення бінарного файлу, як скинути?


94

Я випадково накрутив свій термінал tmux після catвикористання бінарного файлу. Тепер мій tmuxзаплутався. Від'єднання та повторне прикріплення не допомагає, а також не перемальовується (Cb r). Запуск resetлише перемальовує активну панель, а не інше. Запуск ssty saneабо всередині, і поза ним tmuxтакож не допомагає.

tmux заплутався

У межах кожної панелі у мене є нормальний зворотний зв'язок від того, що я вводя (початковий дзвінок resetодразу після того, як термінал заплутався, вирішив це), але я не можу виправити рядок стану.

У gnome-terminalкожне оновлення статус-бару призводить до статус-бару рости (див скріншот вище). Наприклад, це відбувається, коли я запускаю нову програму, коли перемикаю панелі або коли я змінюю розмір області. Примушування перемальовки (за C-b rдопомогою запуску resetабо через меню gnome-terminal) скорочує рядок стану до одного рядка, але він залишається пошкодженим.

У xtermрядку статусу залишається один рядок, але він залишається зіпсованим, як на фотографії.

Я використовую tmux 1.5.

  • Як виправити свій tmux-термінал?

Цей звіт про помилку з 2008 року, схоже, описує ту саму проблему, але вона була позначена як виправлена. Я не знаю, у якій версії це було виправлено, але tmux 1.5 повинен містити виправлення з 2008 року.


Просто була ця проблема, і «ясна» працювала на мене.
користувач149818

1
У випадку, якщо хтось зіткнеться з тією ж проблемою, після виконання всього вищесказаного, мій рядок стану tmux все ще був зіпсований. Налаштування параметру вікна-праворуч відремонтувало його.

2
Вищенаведена пропозиція зафіксувала це і для мене. Команда для цього була: Control+ b+, :а потім set -g status-right "#H"встановити статус-право на ім'я хоста.
Mayank

Відповіді:


85

Спробуйте перейменувати вікно 4

  • Перехід до вікна 4: Control+b 4
  • Вікно перейменування: Control+ b , Control+ umyNewname

(Ось кома посередині)

Або: Control+b :rename-window myNewname


1
Перейменування вікна працює як шарм
ексгума

4
Потрібно очистити ім’я, перш ніж вводити нове. Найпростіший спосіб - ctrl+uтак, тому повна послідовністьctrl+b , ctrl+u newname
z0r

1
Солодке - це працює і для byobu( f8, <newname>)
ali_m

Для чого Control-uпотрібні? Control-,вже перейменувати правильно? Хоча я можу підтвердити, що це було потрібно в моєму випадку, чи є це якийсь символ скидання?
hbogert

1
Control-u очищає лінію. якщо ви кожен фахівець знайдете свій пароль в терміналі і знаєте це, ви можете очистити запис за допомогою control-u, замість того, щоб
натискати на пробіл

55

Для очищення безладу потрібно дві послідовності команд:

По-перше, запустіть це у скріпленому вікні (це працює навіть у вас 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 -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\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 -echoIMHO, але інтерактивні команди, як vimправило, встановлюють це.)

Тепер почистіть цей безлад

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

Примітка. Якщо ви використовуєте копію та вставлення (вам, ймовірно, потрібно притримуватись під Shiftчас вставки), ви, ймовірно, не зможете побачити свою пасту, якщо ви використали вищевказану команду, щоб зіпсувати свою tty. Отже, просто сліпо натисніть клавішу Enter після вставки.

Пояснили:

  • stty sane встановлює "здорові" термінальні параметри, тому ви отримуєте відлуння під час набору тексту

  • printf '\033k%s\033\\' "$(basename "$SHELL")"повертає назву вікна до норми Ви можете використовувати tmux rename-window "$(basename "$SHELL")"альтернативно, однак tmux rename-windowобмежується тим, tmuxде завжди працює послідовність евакуації.

  • 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сеансі та виконайте таку команду:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • Або відкрийте іншу оболонку на комп'ютері, який працює 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

PS: Дякую всім, хто допоміг зібрати це рішення.


2
Зауважте uname -nзамість цього hostname -s. hostnameє небезпечним в rootконтексті, оскільки ви можете переробити хост, який буде перейменовано -sна hostnameстаріший Linux / Unix, де не виконуються варіанти.
Тіно

Не скидання заголовка панелі мене також сумує; тому я навіть тут в першу чергу. Дякуємо, що ви єдиний на сторінці, який хоча б визнає цей недолік!
EvanED

2
Розглянемо також "tmux setw автоматичне перейменування" після фіксації заголовка вікна
EB.

stty saneЧастина допомогла мені , коли мій термінал облажався і нічого не показує. Дякую!
Джонні

Якщо ви хочете "відсутній біт", тобто команда, що працює в даний момент, відображається в лівій області статусу, ви можете використовувати команду tmux set-window-option automatic-rename.
Девід Фоерстер

26

Конкретна проблема, яку ви бачите, пов’язана з ім'ям / заголовком вікна 4. Поєднання занадто довго (очевидно) і містить дивні символи, які спричиняють tmux вимірювати його як коротший (тому він не може належним чином обмежити рядок стану до ширини екрана) Я не впевнений, як її скинути (на моєму він відстежує назву процесу переднього плану), можливо, вам доведеться закрити вікно.


4
за замовчуванням перейменувати вікно^b - ,
Роб

8
У випадку, якщо комбінація клавіш у коментарі @ Роба вас бентежить, це Ctrl- bтоді ,.
Дуг Пол,

Зауважте, що при перейменуванні вікна поле попередньо заповнюється поточним іменем вікна (а курсор знаходиться в кінці цього імені). Оскільки назва мого вікна була довгою послідовністю сміття, мені довелося затримати Backspaceхвилину, щоб очистити поточну назву. Для мене візуальні відгуки зрештою дали зрозуміти, що все старе ім’я було стерто.
Дуг Пол,

ви також можете використовувати Ctrl-b :вікно перейменування <ім'я йде сюди>; для цього використовується командна система tmux замість комбінації клавіш.
Аббафей


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

виправили це для мене, коли щось пошкоджене, ніж ім'я вікна, було пошкоджене, і я не міг заважати зрозуміти, що це.


2

tmuxможе бути лише частиною проблеми. Можливо, вам доведеться викликати stty saneв командному рядку. Це скидає драйвери TTY в ядрі до деякого набору значень за замовчуванням, які зазвичай дозволяють вам продовжувати. Якщо драйвери TTY досить заблукали, можливо, вам доведеться набрати stty sane"blind", тобто без екранного зворотного зв'язку.


stty saneтакож не вирішує проблему. У мене є зворотний зв’язок на екрані, в межах кожної з tmuxпанелей я можу набрати та мати зворотний зв'язок як звичайний, але як тільки tmux потрібно щось намалювати (наприклад, запустити нову програму, переключити чи змінити розмір панелей), панель стану переходить у панелі ...
gerrit

2

Спробуйте перезавантажити конфігураційний файл?

Ctrlb, тоді: :source-file ~/.tmux.conf


найкраще рішення поки що.
Дейв

-3

щоб вирішити проблему для мене:

Я просто вбив панель проблем і вікно, і створив нове вікно та область.

На панелі випусків CTRL+ AXі CTRL+ AC.


цей шлях для мене знову. ніякі інші способи не можуть допомогти
свербіть
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.