Aktuelle Fensternummer für Bash-Eingabeaufforderung abrufen

Aktuelle Fensternummer für Bash-Eingabeaufforderung abrufen

Ich möchte die Statusleiste durch eine Bash-Eingabeaufforderung ersetzen, die die Fensternummer wie ① anzeigt. Wie kann ich die aktuelle Fensternummer in der Shell abrufen?

Es gibt die Umgebungsvariable TMUX_PANE, leider kein TMUX_WINDOW.

Das Beste, was ich erreicht habe, ist: tmux display-messageFenster-/Bereichsinformationen aufblinken lassen, dann die letzte Zeile nehmen tmux show-messagesund analysieren. Ich möchte nicht, dass die Fenster-/Bereichsinformationen jedes Mal aufblinken, wenn die Eingabeaufforderung angezeigt wird.

Antwort1

Sie können display-message -pdie Ausgabe an stdout senden, um zu vermeiden, dass Sie sie aus der Ausgabe von extrahieren müssen show-messages:

tmux display-message -p '#I'

Sie können die eingekreisten Zahlen wie folgt umrechnen (SchlagSyntax; getestet mit den Versionen 3.2.48 und 4.2.20):

circled_digits=$(printf %s \${$'\xEA',\`,{a..s}} | iconv -f UTF-16BE)
# circled_digits='⓪①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'

tmux_winidx_circled() {
    local winidx=$(tmux display-message -p '#I')
    if (( winidx > 20 )); then
        echo "($winidx)"
    else
        echo "${circled_digits:$winidx:1}"
    fi
}

Die erste Zeile ist insofern angenehm, als dass sie reines ASCII ist. Wenn es Ihnen nichts ausmacht, dass Ihre Konfigurationsdatei Nicht-ASCII-Zeichen enthält, können Sie stattdessen die zweite Zeile verwenden (sie macht die Absicht auf jeden Fall deutlicher, vorausgesetzt, Ihr Editor und Ihre Shell können mit der Kodierung der Datei richtig umgehen).

Dann könntest du es so verwenden:

PS1="$(tmux_winidx_circled) \W➤ "

Antwort2

Ich musste nur die Tmux-Nachricht beim Starten der Shell flashen, extrahieren und speichern. D-oh!

tmux display-message
export TMUX_WINDOW=$(tmux show-messages | tail -1 | grep -o '\[[0-9]\] \([0-9]\)' | grep -o '[0-9]$')
PS1="$(echo $TMUX_WINDOW) \W➤ "

Jetzt sieht meine Eingabeaufforderung folgendermaßen aus:

[2] ~➤  

Und was noch übrig bleibt, ist, die Analyse zu verbessern und normale Ziffern durch hübsche Unicode-Ziffernzeichen in Kreisen zu ersetzen – aber das ist eine andere Geschichte.

verwandte Informationen