pasek stanu tmux uszkodzony po catting pliku binarnym, jak zresetować?


94

Przypadkowo zepsułem terminal Tmux po wczytaniu catpliku binarnego. Teraz mój tmuxjest popsuty. Odłączanie i ponowne dołączanie nie pomaga, podobnie jak przerysowywanie (Cb r). Uruchamianie resetprzerysowuje tylko aktywne okienko, a nie resztę. Uruchamianie ssty sanewewnątrz lub na zewnątrz tmuxteż nie pomaga.

Tmux zawiedli

W każdym okienku mam normalną informację zwrotną z tego, co wpisuję (pierwsze wywołanie resetnatychmiast po pomyleniu terminala rozwiązało to), ale nie mogę naprawić paska stanu.

W gnome-terminalkażdej aktualizacji paska stanu prowadzi do wzrostu paska stanu (patrz zrzut ekranu powyżej). Dzieje się tak na przykład podczas uruchamiania nowej aplikacji, przełączania paneli lub zmiany rozmiaru okienka. Wymuszenie przerysowania (przez C-b r, uruchomienie resetlub za pomocą menu terminala gnome) powoduje skrócenie paska stanu do pojedynczej linii, ale pozostaje uszkodzony.

W xterm, pasek stanu pozostaje w obrębie jednej linii, ale pozostaje uszkodzony jak na zdjęciu.

Używam Tmux 1.5.

  • Jak naprawić mój tmuxterminal?

Ten raport o błędach z 2008 roku wydaje się opisywać ten sam problem, ale został oznaczony jako naprawiony. Nie wiem w jakiej wersji został naprawiony, ale tmux 1.5 powinien zawierać poprawkę z 2008 roku.


Właśnie miałem ten problem i „jasne” zadziałało dla mnie.
user149818,

1
W przypadku, gdy ktoś napotka ten sam problem, po wykonaniu wszystkich powyższych czynności, mój pasek stanu tmux nadal był zawalony. Ustawienie opcji okna status-right naprawiło to.

2
Powyższa sugestia naprawiła to również dla mnie. Poleceniem było: Control+ b+, :a następnie set -g status-right "#H"ustawić prawo do statusu nazwy hosta.
Mayank

Odpowiedzi:


85

Spróbuj zmienić nazwę okna 4

  • Przejdź do okna 4: Control+b 4
  • Zmień nazwę okna: Control+ b , Control+ umojaNowa nazwa

(To przecinek na środku)

Lub: Control+b :rename-window myNewname


1
Zmiana nazwy okna działa jak urok
ekshuma

4
Musisz usunąć nazwę przed wpisaniem nowego. Najłatwiej jest to ctrl+uzrobić, więc pełna sekwencja toctrl+b , ctrl+u newname
z0r

1
Sweet - działa to byoburównież dla ( f8, <newname>)
ali_m

Dlaczego jest Control-upotrzebny? Control-,już zmienia nazwę, prawda? Chociaż mogę potwierdzić, że w moim przypadku był on potrzebny, czy jest to jakiś rodzaj resetowania?
hbogert

1
Control-u czyści linię. jeśli każdy fatfinger hasłem w terminalu i znasz go, możesz wyczyścić wpis za pomocą control-u, zamiast uderzać w backspace 20 razy
Rqomey

55

Potrzebujesz dwóch sekwencji poleceń, aby uporządkować bałagan:

Najpierw uruchom to w zniekształconym oknie (działa nawet, gdy jesteś w ssh):

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

Następnie uruchom to na komputerze, który działa tmux(działa wewnątrz i na zewnątrz tmux):

Następujące polecenie wpływa na wszystkie tmuxinstancje, które mogą zmienić lewy status bardziej niż bieżące okno. Jeśli nie potrzebujesz tej funkcji, zostaw ją.

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

Wyjaśnione szczegółowo

Zostało to zebrane, aby rozwiązać wszystkie bity znalezione w innych odpowiedziach i komentarzach. Wydaje się, że przy drugim poleceniu pozostało już niewiele. (Zobacz w „brakującym bicie” poniżej).

Aby zrozumieć, jak to działa, najpierw zabijmy linię statusu tmuxi tty. Następnie poprawiamy go ponownie, używając metody, która powinna być zawsze dostępna (w przeciwieństwie do komendy reset).

Jak sprawić, by tmuxterminal (zakładał się UTF-8) bezużyteczny

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

Ostrzeżenie: po uruchomieniu powyżej polecenia powłoka wygląda na ślepą i głuchą i wydaje się mówić tylko bzdury w nieznanym obcym języku. Zobacz poniżej, jak to naprawić.

Wyjaśniono:

  • stty -echo zabija odpowiedź typu terminala

  • printf '\016'robi a SO, więc jesteś w alternatywnym zestawie znaków

  • printf '\033]2;%s\007' 'right status text'ustawia odpowiedni status, w tym przypadku $'\355”, co odsłania błąd prezentacji

  • printf '\033k%2000s\033\\' $'\302\217' ustawia nazwę tytułu okna

Może to być kombinacja widoczna na terminalu po awarii jakiegoś interaktywnego polecenia i wrzuceniu go z powrotem do powłoki. (Nie /bin/catmożesz prowokować stty -echoIMHO, ale takie polecenia jak vimzwykle to ustawiają).

Teraz posprzątaj ten bałagan

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

Uwaga: Jeśli korzystasz z funkcji kopiuj i wklej (prawdopodobnie musisz przytrzymać wciśnięty Shiftpodczas wklejania), prawdopodobnie nie zobaczysz wklejania, jeśli użyłeś powyższego polecenia do zepsucia tty. Dlatego po prostu wklej na ślepo klawisz Enter po wklejeniu tego.

Wyjaśniono:

  • stty sane ustawia „rozsądne” parametry terminala, dzięki czemu odzyskujesz echo podczas pisania

  • printf '\033k%s\033\\' "$(basename "$SHELL")"przywraca normalny tytuł okna. Możesz użyć tmux rename-window "$(basename "$SHELL")"alternatywnie, jednak tmux rename-windowjest ograniczony do tego, tmuxgdzie zawsze działa sekwencja ucieczki.

  • printf '\033]2;%s\007' "$(uname -n)"resetuje prawo do statusu, aby było wyświetlane jako domyślne. (Pamiętaj, że nie powinieneś używać tmux set status-right "something", ponieważ po prostu wyświetla to, pane titleco uległo uszkodzeniu, więc status-rightpo prostu ujawnia jakiś błąd prezentacji. Pamiętaj również, że nie znalazłem tmuxpolecenia, aby bezpośrednio ustawić tytuł panelu).

  • tput reset resetuje terminal, na wypadek gdyby zostało to pomieszane

  • tmux refresh odświeża ekran, aby pozbyć się innych zanieczyszczeń, które mogły się pojawić

Brakujący kawałek

printf '\033k%s\033\\' "$(basename "$SHELL")"Traci standardową zdolność tmuxdo zaprezentowania aktualnego polecenia w lewym obszarze stanu. Po printf '\033k%s\033\\' "something"egzekucji umiejętność ta została utracona, a ja nie znalazłem jeszcze dobrego sposobu, aby ją przywrócić, tak jak wcześniej.

Ale, jak zauważono w komentarzach poniżej, możesz aktywować podobną funkcję tmuxjako zamiennik z następującym tmuxustawieniem:

set-window-option automatic-rename on
  • Zrób to w tmuxwierszu poleceń, do którego można dotrzeć w bieżącym oknie za pomocą „Escape” :(gdzie „Escape” jest tmuxklawiszem polecenia), a następnie wprowadź polecenie.

  • Lub wycinaj tmux set-window-option automatic-rename onw swoim obecnym terminalu, ale to się nie udaje, jeśli nie jesteś bezpośrednio na odpowiednim poziomie powłoki, na przykład, nie działa on w sudolub ssh.

  • Lub otwórz inne okno w bieżącej tmuxsesji i wykonaj następujące polecenie:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • Lub otwórz kolejną powłokę na uruchomionym komputerze tmuxi wykonaj następujące polecenie (to jest poza 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: Dziękujemy wszystkim, którzy pomogli w złożeniu tego rozwiązania.


2
Uwaga uname -nzamiast hostname -s. hostnamejest niebezpieczny w rootkontekście, ponieważ możesz zmienić nazwę swojego hosta -sna starszy Linux / Unix, gdzie hostnamenie ma opcji grok.
Tino

Smutne jest też to, że nie zresetowałem tytułu okienka; dlatego nawet tu jestem. Dziękujemy, że jesteś jedyną osobą na stronie, która przynajmniej przyznaje się do tej wady!
EvanED,

2
Rozważ też „automatyczna zmiana nazwy tmux setw” po ustaleniu tytułu okna
EB.

Ta stty saneczęść pomogła mi, gdy mój terminal był zepsuty i niczego nie pokazywał. Dziękuję Ci!
Johnny

Jeśli chcesz „brakujący bit”, tj. Aktualnie uruchomione polecenie wyświetlane w lewym obszarze stanu, możesz użyć polecenia tmux set-window-option automatic-rename.
David Foerster,

26

Konkretny problem, jaki widzisz, wiąże się z nazwą / tytułem okna 4. Kombinacja bycia zbyt długim (oczywiście) i zawierającym dziwne znaki, które powodują, że tmux mierzy go jako krótszy (więc nie odpowiednio ogranicza pasek stanu do szerokości ekranu) Nie jestem pewien, jak to zresetować (w moim przypadku śledzi nazwę procesu na pierwszym planie), być może będziesz musiał zamknąć okno.


4
domyślnie zmienia nazwę okna^b - ,
Rob

8
W przypadku, gdy skrót klawiaturowy w komentarzu @ Rob cię myli, to Ctrl- bwtedy ,.
Doug Paul

Pamiętaj, że kiedy zmieniasz nazwę okna, pole jest wstępnie wypełnione bieżącą nazwą okna (a kursor znajduje się na końcu tej nazwy). Ponieważ nazwa mojego okna była długą sekwencją śmieci, musiałem przytrzymać Backspaceprzez minutę, aby wyczyścić obecną nazwę. Dla mnie wizualna informacja zwrotna ostatecznie wyjaśniła, że ​​cała stara nazwa została usunięta.
Doug Paul

możesz także użyć Ctrl-b :okna zmiany nazwy <nazwa idzie tutaj>; używa to systemu poleceń tmux zamiast skrótu klawiaturowego dla tego polecenia.
Abbafei,


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

naprawiłem to, gdy coś innego niż nazwa okna było uszkodzone i nie mogłem się martwić, aby dowiedzieć się, co to było.


2

tmuxmoże stanowić tylko część problemu. Może być konieczne wywołanie stty sanez wiersza poleceń. Spowoduje to zresetowanie sterowników TTY w jądrze na pewien zestaw wartości domyślnych, które zwykle pozwalają kontynuować. Jeśli sterowniki TTY są wystarczająco pomieszane, być może trzeba wpisać stty sane„ślepy”, to znaczy bez informacji zwrotnej na ekranie.


stty saneteż nie rozwiązuje problemu. Mam informacje zwrotne na ekranie, w obrębie każdego tmuxpanelu mogę pisać i mam opinię jak zwykle, ale jak tylko Tmux będzie musiał coś narysować (np. Uruchomienie nowej aplikacji, przełączanie lub zmiana rozmiaru paneli), pasek stanu przesuwa się do paneli ...
gerrit

2

Spróbuj ponownie załadować plik konfiguracyjny?

Ctrlb, następnie: :source-file ~/.tmux.conf


jak dotąd najlepsze rozwiązanie.
dave

-3

naprawić problem dla mnie:

Właśnie zabiłem okienko i okno problemów i utworzyłem nowe okno i okienko.

W okienku wydania CTRL+ AXi CTRL+ AC.


w ten sposób znowu dla mnie. nic innego nie może pomóc
itech
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.