tmux statusleiste beschädigt nach dem catting einer binärdatei, wie man zurücksetzt

94

Ich habe versehentlich mein tmux-Terminal versaut, nachdem ich cateine Binärdatei erstellt habe. Jetzt ist meine tmuxdurcheinander. Das Lösen und erneute Anfügen hilft weder, noch wird ein Neuzeichnen (Cbr) durchgeführt. Beim Ausführen wird resetnur der aktive Bereich neu gezeichnet, nicht der Rest. Laufen ssty saneentweder drinnen oder draußen tmuxhilft auch nicht.

tmux hat versagt

In jedem Fenster habe ich normales Feedback von dem, was ich eingebe (der erste Anruf von resetunmittelbar nach dem Versagen des Terminals hat dies behoben), aber ich kann die Statusleiste scheinbar nicht reparieren.

In gnome-terminalführt jede Aktualisierung der Statusleiste dazu, dass die Statusleiste wächst (siehe Abbildung oben). Dies passiert beispielsweise, wenn ich eine neue Anwendung ausführe, wenn ich zwischen Fenstern wechsle oder wenn ich die Größe eines Fensters ändere. Durch das Erzwingen eines Neuzeichnens (von C-b r, durch Ausführen resetoder über das Gnome-Terminal-Menü) wird die Statusleiste auf eine einzelne Zeile verkleinert, bleibt jedoch beschädigt.

In xtermbleibt die Statusleiste innerhalb 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 einen Fix von 2008 enthalten.

Gerrit
quelle
Hatte gerade dieses Problem und "klar" funktionierte bei mir.
user149818
1
Falls jemand auf dasselbe Problem stößt, war meine tmux-Statusleiste nach all den oben genannten Schritten immer noch durcheinander. Durch Setzen der Fensteroption Status-Rechts wurde es repariert.
2
Der obige Vorschlag hat es auch für mich behoben. Der Befehl dazu war: Control+ b+ :und dann set -g status-right "#H"das Statusrecht auf den Hostnamen zu setzen.
Mayank

Antworten:

85

Versuchen Sie, Fenster 4 umzubenennen

  • Wechseln Sie zu Fenster 4: Control+b 4
  • Fenster umbenennen : Control+ b , Control+ umyNewname

(Das ist ein Komma in der Mitte)

Oder: Control+b :rename-window myNewname

Rqomey
quelle
1
Das Umbenennen des Fensters funktioniert wie ein Zauber
Exhuma
4
Sie müssen den Namen löschen, bevor Sie den neuen eingeben können. Der einfachste Weg ist mit ctrl+u, die vollständige Sequenz ist alsoctrl+b , ctrl+u newname
z0r
1
Sweet - das funktioniert byobuauch ( f8, <newname>)
ali_m 18.11.15
Warum ist das Control-unötig? Control-,heißt schon richtig umbenennen? Obwohl ich bestätigen kann, dass es in meinem Fall benötigt wurde, handelt es sich um eine Art Reset-Zeichen?
HBOGERT
1
Control-u löscht die Zeile. wenn Sie jedes Ihr Passwort in einem Terminal fatfinger und es kennen, können Sie den Eintrag mit Steuer-u löschen, statt 20 - mal die Rücktaste drücken
Rqomey
55

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 befinden ssh):

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, der ausgeführt wird tmux(es funktioniert innerhalb und außerhalb von tmux):

Der folgende Befehl wirkt sich auf alle tmuxInstanzen aus, die den linken Status von mehr als dem aktuellen Fenster ändern können. 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, töten wir zuerst die Statuszeile von tmuxund tty. Danach korrigieren wir es erneut mit einer Methode, die immer verfügbar sein sollte (im Gegensatz zum Befehl reset).

Wie man ein tmuxTerminal UTF-8unbrauchbar macht

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

Warnung: Nachdem der Befehl ausgeführt wurde, sieht die Shell blind und taub aus und scheint nur Bullshit in einer unbekannten Fremdsprache zu sprechen. Informationen zur Reparatur finden Sie weiter unten.

Erklärt:

  • stty -echo bricht die Terminal-Antwort ab

  • printf '\016'Tut ein SO, so dass Sie auf dem alternativen Zeichensatz sind

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

  • printf '\033k%2000s\033\\' $'\302\217' Legt den Fenstertitelnamen fest

Dies ist möglicherweise die Kombination, die auf dem Terminal angezeigt wird, nachdem ein interaktiver Befehl abgestürzt ist und wieder in der Shell abgelegt wurde. (Mit können /bin/catSie stty -echoIMHO nicht provozieren , aber interaktive Befehle wie vimgewohnt setzen dies.)

Räumen Sie jetzt dieses Durcheinander 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 (Sie müssen wahrscheinlich Shiftbeim Einfügen gedrückt halten), wird Ihre Einfügung möglicherweise nicht angezeigt, wenn Sie den oben genannten Befehl verwendet haben, um Ihr Problem zu beheben tty. Drücken Sie daher einfach blind die Eingabetaste, nachdem Sie diese eingefügt haben.

Erklärt:

  • stty sane Setzt "vernünftige" Terminalparameter, damit Sie beim Tippen Ihr Echo zurückbekommen

  • printf '\033k%s\033\\' "$(basename "$SHELL")"Setzt den Fenstertitel auf Normal zurück. Sie können tmux rename-window "$(basename "$SHELL")"alternativ verwenden, ist jedoch darauf tmux rename-windowbeschränkt, tmuxwo die Escape-Sequenz immer funktioniert.

  • printf '\033]2;%s\007' "$(uname -n)"Setzt das Status-Recht zurück, um als Standard angezeigt zu werden. (Beachten Sie, dass Sie diese Option nicht verwenden sollten tmux set status-right "something", da sie nur die beschädigten ausgibt pane title, sodass status-rightnur ein Präsentationsfehler auftritt. Beachten Sie auch, dass ich keinen tmuxBefehl zum direkten Festlegen des Fenstertitels gefunden habe.)

  • tput reset Setzt das Terminal zurück, falls dies durcheinander gebracht wurde

  • tmux refresh Aktualisiert den Bildschirm, um andere möglicherweise aufgetauchte Fremdkörper zu entfernen

Fehlendes bisschen

Das printf '\033k%s\033\\' "$(basename "$SHELL")"verliert die Standardfähigkeit tmux, den aktuellen Befehl im linken Statusbereich darzustellen. Nachdem printf '\033k%s\033\\' "something"diese Fähigkeit ausgeführt wurde, geht sie verloren und ich habe noch keinen guten Weg gefunden, wie ich sie wieder zurückbringen kann.

Wie in den Kommentaren unten erwähnt, können Sie eine ähnliche Funktion tmuxals Ersatz mit der folgenden tmuxEinstellung aktivieren :

set-window-option automatic-rename on
  • Tun Sie dies entweder in der tmuxBefehlszeile, die im aktuellen Fenster mit "Escape" :(wobei "Escape" Ihre tmuxBefehlstaste ist) erreichbar ist, und geben Sie dann den Befehl ein.

  • Oder tmux set-window-option automatic-rename onin Ihrem aktuellen Terminal ausführen , aber dies schlägt fehl, wenn Sie nicht direkt auf der richtigen Shell-Ebene sind, z. B. funktioniert es nicht in sudooder ssh.

  • Oder öffnen Sie ein anderes Fenster in der aktuellen tmuxSitzung 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, der ausgeführt wird, tmuxund führen Sie den folgenden Befehl aus (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 diese Lösung mit aufgebaut haben.

Tino
quelle
2
Bitte beachten Sie die uname -nstatt hostname -s. Dies hostnameist im rootKontext gefährlich , da Ihr Host -sunter älteren Linux- / Unix- hostnameBetriebssystemen möglicherweise umbenannt wird, bei denen die Optionen nicht verfügbar sind.
Tino
Das Nicht-Zurücksetzen des Fenstertitels macht mich auch traurig. deshalb bin ich ja überhaupt hier. Vielen Dank, dass Sie der einzige auf dieser Seite sind, der dieses Manko zumindest anerkennt!
EvanED
2
Beachten Sie auch "tmux setw automatic-rename" nach dem Fixieren des Fenstertitels
EB.
Das stty saneTeil hat mir geholfen, als mein Terminal kaputt war und nichts zeigte. Danke!
Johnny
Wenn Sie das "fehlende Bit", dh den aktuell ausgeführten Befehl, im linken Statusbereich anzeigen möchten, können Sie den Befehl tmux verwenden set-window-option automatic-rename.
David Foerster
26

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

Random832
quelle
4
Die Standardeinstellung zum Umbenennen eines Fensters ist^b - ,
Rob
8
Falls Sie die Tastenkombination in @ Robs Kommentar verwirrt, ist es Ctrl- bdann ,.
Doug Paul
Beachten Sie, dass das Feld beim Umbenennen eines Fensters bereits mit dem aktuellen Fensternamen gefüllt ist (und sich der Cursor am Ende dieses Namens befindet). Da mein Fenstername eine lange Folge von Müll war, musste ich Backspaceeine Minute lang gedrückt halten, um den aktuellen Namen zu löschen. Durch visuelles Feedback wurde mir schließlich klar, dass der gesamte alte Name gelöscht worden war.
Doug Paul
Sie können auch das Ctrl-b :Umbenennungsfenster <name goes here> verwenden. Dabei wird das Befehlssystem tmux anstelle der Tastenkombination für diesen Befehl verwendet.
Abbafei,
5

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

John Morales
quelle
5
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 war und ich nicht die Mühe hatte herauszufinden, was es war.

Harald Wagener
quelle
2

tmuxkönnte nur einen Teil des Problems darstellen. Möglicherweise müssen Sie stty sanean der Befehlszeile aufrufen . Dadurch werden die kernelinternen TTY-Treiber 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" eingeben, dh ohne Bildschirmrückmeldung.

Bruce Ediger
quelle
stty sanelöst das Problem auch nicht. Ich habe zwar Bildschirm-Feedback, innerhalb jedes tmuxBereichs kann ich wie gewohnt Feedback eingeben und haben, aber sobald tmux etwas zeichnen muss (z. B. eine neue Anwendung ausführen, Bereiche wechseln oder die Größe ändern), wird die Statusleiste in die Bereiche verschoben ...
Gerrit
2

Versuchen Sie, Ihre Konfigurationsdatei neu zu laden?

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

Nicht jetzt
quelle
beste Lösung bisher.
Dave
-3

um das Problem für mich zu beheben:

Ich habe gerade das Problemfenster und das Fenster geschlossen und ein neues Fenster und ein neues Fenster erstellt.

Im Ausgabebereich CTRL+ AXund CTRL+ AC.

itech
quelle
wieder so für mich. Keine andere Möglichkeit kann helfen
itech