it-swarm.com.de

tmux Statusleiste nach dem Catten einer Binärdatei beschädigt, wie zurücksetzen?

Ich habe versehentlich mein tmux-Terminal vermasselt, nachdem ich eine Binärdatei cating. Jetzt ist mein tmux durcheinander. Das Abnehmen und erneute Anhängen hilft nicht, ebenso wenig wie ein Neuzeichnen (C-b r). Wenn Sie reset ausführen, wird nur der aktive Bereich neu gezeichnet, nicht der Rest. Laufen ssty sane entweder drinnen oder draußen tmux hilft auch nicht.

tmux messed up

In jedem Bereich habe ich normales Feedback von dem, was ich eingebe (der erste Aufruf von reset unmittelbar nachdem das Terminal durcheinander geraten ist, hat dies behoben), aber ich kann die Statusleiste anscheinend nicht reparieren.

Im gnome-terminal, jedes Update der Statusleiste führt dazu, dass die Statusleiste wächst (siehe Abbildung oben). Dies geschieht beispielsweise, wenn ich eine neue Anwendung ausführe, wenn ich zwischen Fenstern wechsle oder wenn ich die Größe eines Fensters ändere. Neuzeichnen erzwingen (By C-b r, durch Ausführen von reset oder über das Gnome-Terminal-Menü) wird die Statusleiste auf eine einzelne Zeile verkleinert, sie bleibt jedoch beschädigt.

In xterm bleibt die Statusleiste in einer Zeile, bleibt aber wie abgebildet beschädigt.

Ich benutze tmux 1.5.

  • Wie repariere ich mein tmux- Terminal?

Dieser Fehlerbericht aus dem Jahr 2008 scheint dasselbe Problem zu beschreiben, wurde jedoch als behoben markiert. Ich weiß nicht, in welcher Version es behoben wurde, aber tmux 1.5 sollte ein Update von 2008 enthalten.

97
gerrit

Versuchen Sie, Fenster 4 umzubenennen

  • Wechseln Sie zu Fenster 4: Control+b4
  • Fenster umbenennen: Control+b,Control+u Mein neuer Name

(Das ist ein Komma in der Mitte)

Oder: Control+b :rename-window myNewname

86
Rqomey

Sie benötigen zwei Befehlssequenzen, um das Chaos zu beseitigen:

Führen Sie dies zunächst im verstümmelten Fenster aus (dies funktioniert auch, wenn Sie sich in ssh befinden):

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

Führen Sie dies dann auf dem Computer aus, auf dem tmux ausgeführt wird (es funktioniert innerhalb und außerhalb von tmux):

Der folgende Befehl wirkt sich auf alle tmux Instanzen aus, wodurch der linke Status von mehr als dem aktuellen Fenster geändert werden kann. Wenn Sie diese Funktion nicht benötigen, lassen Sie sie weg.

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

Im Detail erklärt

Dies wurde zusammengestellt, um alle Bits zu adressieren, die in anderen Antworten und Kommentaren gefunden wurden. Derzeit scheint nur noch ein kleines bisschen mit dem zweiten Befehl übrig zu sein. (Siehe im "fehlenden Bit" unten).

Um zu verstehen, wie dies funktioniert, lassen Sie uns zuerst die Statuszeile von tmux und tty beenden. Danach korrigieren wir es erneut mit einer Methode, die immer verfügbar sein sollte (im Gegensatz zum Befehl reset).

So machen Sie ein tmux Terminal (vorausgesetzt UTF-8) Unbrauchbar

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

Warnung : Nachdem die Shell über dem Befehl ausgeführt wurde, sieht sie blind und taub aus und scheint nur in einer unbekannten fremden Sprache Bullshit zu sprechen. Weiter unten erfahren Sie, wie Sie dies reparieren können.

Erklärt:

  • stty -echo Beendet die Antwort vom Terminaltyp

  • printf '\016' Führt ein SO aus, sodass Sie sich im alternativen Zeichensatz befinden

  • printf '\033]2;%s\007' 'right status text' Setzt den richtigen Status, in diesem Fall $'\355 ', Was einen Präsentationsfehler aufdeckt

  • printf '\033k%2000s\033\\' $'\302\217' Legt den Namen des Fenstertitels fest

Dies ist möglicherweise die Kombination, die Sie auf dem Terminal sehen können, nachdem ein interaktiver Befehl abgestürzt ist und wieder in die Shell eingefügt wurde. (Mit /bin/cat Können Sie IMHO nicht stty -echo Provozieren, aber interaktive Befehle wie vim setzen dies normalerweise.)

Räumen Sie jetzt dieses Chaos auf

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

Hinweis : Wenn Sie Kopieren und Einfügen verwenden (wahrscheinlich müssen Sie beim Einfügen Shift gedrückt halten), können Sie das Einfügen wahrscheinlich nicht sehen, wenn Sie den obigen Befehl verwendet haben, um Ihre Fehler zu beheben tty. Drücken Sie daher nach dem Einfügen einfach blind die Eingabetaste.

Erklärt:

  • stty sane Setzt "vernünftige" Terminalparameter, sodass Sie während der Eingabe Ihr Echo zurückerhalten

  • printf '\033k%s\033\\' "$(basename "$Shell")" setzt den Fenstertitel wieder auf normal. Sie können alternativ tmux rename-window "$(basename "$Shell")" verwenden, jedoch ist tmux rename-window Auf tmux beschränkt, wobei die Escape-Sequenz immer funktioniert.

  • printf '\033]2;%s\007' "$(uname -n)" setzt das Statusrecht zurück, das als Standard angezeigt werden soll. (Beachten Sie, dass Sie tmux set status-right "something" Nicht verwenden sollten, da nur das beschädigte pane title Ausgegeben wird, sodass status-right Nur einen Präsentationsfehler aufdeckt. Beachten Sie auch, dass ich es nicht gefunden habe ein tmux Befehl zum direkten Festlegen des Fenstertitels.)

  • tput reset Setzt das Terminal zurück, nur für den Fall, dass dies durcheinander gebracht wurde

  • tmux refresh Aktualisiert den Bildschirm, um andere möglicherweise aufgetretene Ablagerungen zu entfernen

Fehlendes bisschen

Die Funktion printf '\033k%s\033\\' "$(basename "$Shell")" verliert die Standardfähigkeit von tmux, den aktuellen Befehl im linken Statusbereich anzuzeigen. Nachdem printf '\033k%s\033\\' "something" Ausgeführt wurde, geht diese Fähigkeit verloren und ich habe noch keinen guten Weg gefunden, wie ich sie zurückbringen kann, wie sie vorher war.

Wie in den Kommentaren unten erwähnt, können Sie jedoch eine ähnliche Funktion von tmux als Ersatz mit der folgenden Einstellung tmux aktivieren:

set-window-option automatic-rename on
  • Führen Sie dies entweder in der Befehlszeile tmux aus, die im aktuellen Fenster mit "Escape" : (Wobei "Escape" Ihre tmux - Befehlstaste ist) und dann Geben Sie den Befehl ein.

  • Oder führen Sie tmux set-window-option automatic-rename on In Ihrem aktuellen Terminal aus. Dies schlägt jedoch fehl, wenn Sie sich nicht direkt auf der richtigen Shell-Ebene befinden. Dies funktioniert beispielsweise nicht innerhalb von Sudo oder ssh.

  • Oder öffnen Sie ein anderes Fenster in der aktuellen Sitzung tmux und führen Sie den folgenden Befehl aus:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
    
  • Oder öffnen Sie eine andere Shell für den Computer, auf dem tmux ausgeführt wird, und führen Sie den folgenden Befehl aus (dieser befindet sich außerhalb von 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: Vielen Dank an alle, die bei der Zusammenstellung dieser Lösung mitgeholfen haben.

61
Tino

Das spezifische Problem, das Sie sehen, hat mit dem Namen/Titel von Fenster 4 zu tun. Eine Kombination aus zu lang (offensichtlich) und seltsamen Zeichen, die dazu führen, dass tmux es als kürzer misst (sodass die Statusleiste nicht richtig eingeschränkt wird) Ich bin mir nicht sicher, wie ich es zurücksetzen soll (bei mir wird der Name des Vordergrundprozesses verfolgt). Möglicherweise müssen Sie das Fenster schließen.

26
Random832

mach das einfach $ reset && tmux rename-window <new_window_name>

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

dies wurde für mich behoben, als etwas anderes als der Fenstername beschädigt wurde und ich nicht die Mühe hatte, herauszufinden, was es war.

5
Harald Wagener

Versuchen Sie, Ihre Konfigurationsdatei neu zu laden?

Ctrlb, dann: :source-file ~/.tmux.conf

2
Not Now

tmux ist möglicherweise nur ein Teil des Problems. Möglicherweise müssen Sie stty sane in der Kommandozeile. Dadurch werden die TTY-Treiber im Kernel auf einige Standardwerte zurückgesetzt, mit denen Sie normalerweise fortfahren können. Wenn die TTY-Treiber ausreichend durcheinander sind, müssen Sie möglicherweise stty sane "blind", dh ohne Rückmeldung auf dem Bildschirm.

2
Bruce Ediger