Wie passe ich den „letzten Fenstermarker“ von tmux an?

Wie passe ich den „letzten Fenstermarker“ von tmux an?

Standardmäßig wird Tmux -nach dem Fenstertitel angezeigt, um das zuletzt besuchte Fenster zu kennzeichnen. Gibt es eine Möglichkeit, diese Markierung anzupassen und auf ein benutzerdefiniertes Symbol einzustellen? Danke,

Antwort1

man 1 tmuxsagt:

Standardmäßig zeigt die Fensterliste den Index, den Namen und (sofern vorhanden) das Flag der in der aktuellen Sitzung vorhandenen Fenster in aufsteigender numerischer Reihenfolge an. Sie kann mit den Optionen window-status-formatund angepasst werden window-status-current-format. Das Flag ist eines der folgenden Symbole, das an den Fensternamen angehängt wird:

Symbol    Meaning
*         Denotes the current window.
-         Marks the last window (previously selected).
#         Window is monitored and activity has been detected.
!         A bell has occurred in the window.
~         The window has been silent for the monitor-silence interval.
M         The window contains the marked pane.
Z         The window's active pane is zoomed.

Um set-window-option window-status-format:

window-status-format string
Legen Sie das Format fest, in dem das Fenster in der Statuszeilen-Fensterliste angezeigt wird. […] Der Standardwert ist #I:#W#F.

Dann FORMATSerfahren Sie unter #F„Fensterflaggen“. Ich habe keine Spur von der Möglichkeit gefunden, mit Flaggen verknüpfte Symbole direkt zu ändern. Sie können trotzdem Folgendes verwenden:

Darüber hinaus kann die erste Zeile der Ausgabe eines Shell-Befehls mithilfe von eingefügt werden #().

Das bedeutet, dass Sie es verwenden troder in etwas anderes sedumwandeln können -. Das hier könnte Sie beunruhigen:

Beim Erstellen von Formaten tmuxwird nicht gewartet, bis #()Befehle beendet sind. Stattdessen wird das vorherige Ergebnis der Ausführung desselben Befehls verwendet oder ein Platzhalter, wenn der Befehl noch nicht ausgeführt wurde.

Bei meinen Tests scheinen einfache Ersetzungen durch troder dennoch sedsofort zu funktionieren, also besteht wahrscheinlich kein Grund zur Sorge. tmuxFühren Sie von innen Folgendes aus:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"

oder dieses:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/</')"

Ich empfehle es tr, weil es einfacher und kleiner als ist und eine bessere Leistung erbringen sollte (falls es darauf ankommt). Wenn Sie es jedoch durch eine mehrstellige * -Zeichenfolge sedersetzen möchten, ist dies Ihr Tool. Beispiel:-sed

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/<--/')"

Anmerkungen:

  • %%stattdessen %liegt es am tmuxParser.
  • tmux set-window-option window-status-format …(ohne -g) gibt das Format für ein einzelnes Fenster an. Dies hat Vorrang vor dem globalen Format für dieses bestimmte Fenster.
  • Es gibt auch window-status-current-formatdas Format an, das verwendet wird, wenn das Fenster das aktuelle Fenster ist. Das Flag „letztes Fenster“ gilt natürlich nie für das aktuelle Fenster, aber wenn Sie Flags anpassen möchten, die gelten könnten, müssen Sie es window-status-current-formatebenfalls ändern.
  • Eine hinzuzufügende Zeile /etc/tmux.confoder ~/.tmux.confsieht etwa so aus:

    set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
    

* Oder besser gesagt Multibyte. VergleichenDas.

Antwort2

Ich weiß nicht, wann dies hinzugefügt wurde, aber Sie können Regex-Ersetzungen mit dem tmux-Format durchführen, was dies einfacher macht. Aus der Manpage:

A prefix of the form ‘s/foo/bar/:’ will substitute ‘foo’ with ‘bar’ throughout.
The first argument may be an extended regular expression and a final argument may be ‘i’ to ignore case, for example:
 ‘s/a(.)/\1x/i:’ would change ‘abABab’ into ‘bxBxbx’.

window_flagsFür Ihren Anwendungsfall können Sie den Variableninhalt folgendermaßen ersetzen :

set-window-option -g window-status-format "  #{s/-/>>/:window_flags} #I #W"

verwandte Informationen