Benutzerdefinierte Eingabeaufforderung von Tmux und ZSH: Fehler mit Fensternamen

43

Ich habe meine ZSH-Eingabeaufforderung mit oh-my-zsh angepasst, um die Lesbarkeit zu verbessern und Informationen zu git hinzuzufügen, wenn ich mich in einem Repository befinde .

Beispiel:
bob@inf [~/docs] %
bob@inf [~/src/nicest] master %(in einem Git-Repository)

Es funktioniert gut, aber ich habe einige Fehler tmuxund den Fensternamen. Es zeigt immer noch keinen Sinnwert an und ich kann es nicht mit deaktivieren automatic-rename off(es funktioniert einfach nicht, der Fenstername ändert sich nach jedem Befehl), für das erste Beispiel wird tmux ~/docsfür den Fensternamen verwendet.

Ich bin mir nicht sicher, wie ich das beheben kann. Ich möchte meine zsh-Eingabeaufforderung so lassen, wie sie ist. Wenn ich Änderungen vornehmen kann, aber ich möchte verstehen, wo das Problem liegt.

Eine andere Lösung könnte darin bestehen, den Befehl neu zu definieren settile(aus dieser Antwort ), aber ich bin mir nicht sicher, wie ich es richtig machen soll.

Adrien Coquio
quelle

Antworten:

76

Ich warf einen Blick auf oh-my-zsh und fand einen wahrscheinlichen Verdächtigen .

Wenn der Wert der Umgebungsvariablen TERM mit beginnt screen(was sowohl unter screen als auch unter tmux der Fall sein sollte ), verwendet sie eine Screen- Terminal-Steuersequenz, um den Namen des Fensters auf festzulegen

  • (kurz vor dem Anzeigen einer Shell-Eingabeaufforderung)
    der am weitesten links stehende Teil des Pfads des aktuellen Arbeitsverzeichnisses ( ..gefolgt von den letzten 13 Zeichen oder dem gesamten Pfad, wenn er weniger als 15 Zeichen enthält) und
  • (kurz vor Beginn eine Befehlsausführung )
    das erste „Wort“ von etwa-to-be-laufen - Befehl (nicht mitgerechnet ssh, sudound ein paar andere).

Es hört sich so an, als ob es für Sie so funktioniert (Sie sagten, dass sich der Name Ihres Fensters in geändert hat, ~/docsals Sie sich in diesem Verzeichnis befanden). Wenn Sie diese automatische Umbenennung deaktivieren möchten, können Sie sie vollständig deaktivieren, indem Sie den Shell-Parameter DISABLE_AUTO_TITLE truein Ihrem .zshrc:

DISABLE_AUTO_TITLE=true

Wenn Sie dies nur in einer interaktiven Shell festlegen, erhalten Sie eine leere Zeichenfolge für den Namen des aktuellen Fensters. Oh-my-zsh beendet jedoch die Aktualisierung des Fensters vor jeder Eingabeaufforderung und jedem Befehl in dieser Shell-Instanz (es muss sich in befinden) Ihr .zshrcalle neuen Shell - Instanzen beeinflussen).

Chris Johnsen
quelle
4
Das ist so eine perfekte Antwort. Genau, informativ, präzise und auf den Punkt. Darüber hinaus bietet es eine Lösung zusätzlich zur Beantwortung der ursprünglichen Frage ("Verstehen, wo das Problem liegt"). Es ist nur traurig, dass sich jeder, der sich die Zeit genommen hat, nicht die Mühe gemacht hat, dies als Antwort zu markieren.
Dmondark
Danke Danke Danke Danke Danke Danke Danke Danke
Jezen Thomas
Wo ist eine .zshrcDatei für alle Benutzer?
andilabs
29

Ich weiß, dass die obige Antwort Ihnen eine Lösung bietet, aber eine andere besteht darin, diese Option einfach Ihrer ~ / .tmux.conf hinzuzufügen

set-option -g allow-rename off
albertogg
quelle
Dies ist eine bessere Lösung, da sie nur tmux betrifft.
Paul Oliver
Trotz
6

Ich bin auf dasselbe Problem gestoßen, bei dem der Fenstername von tmux geändert wurde, obwohl in der .tmux.conf Folgendes festgelegt wurde:

set-window-option -g automatic-rename off

Danke Chris Antwort. Mein tmux Fenstername wurde nach meiner Änderung nicht automatisch umbenannt:

set -g default-terminal "screen-256color"

zu:

set -g default-terminal "xterm-256color"
rwxrwxrwx
quelle
0

Wenn Sie die automatische Umbenennung nur für bestimmte Fenster deaktivieren möchten, können Sie Folgendes verwenden:

 set -t [WINDOW_NUMBER] automatic-rename off

Deaktivieren Sie das automatische Umbenennen in einem bestimmten Fenster in einer anderen Sitzung:

 set -t [SESSION]:[WINDOW_NUMBER] automatic-rename off
Viktor Nonov
quelle