Ruft die aktuelle Fensternummer für die Bash-Eingabeaufforderung ab

11

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

Es gibt die Umgebungsvariable TMUX_PANE, leider keine TMUX_WINDOW.

Das nächste, was ich bekommen habe, ist: tmux display-messageFenster- / Fensterinformationen zu flashen, dann die letzte Zeile zu nehmen tmux show-messagesund sie zu analysieren. Ich möchte nicht, dass die Fenster- / Fensterinformationen jedes Mal blinken, wenn die Eingabeaufforderung angezeigt wird.

Wojtek Kruszewski
quelle

Antworten:

14

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

tmux display-message -p '#I'

Sie können in die eingekreisten Zahlen wie folgt konvertieren ( Bash- Syntax; 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 schön, als es sich um reines ASCII handelt. Wenn es Ihnen nichts ausmacht, Nicht-ASCII-Zeichen in Ihrer Konfigurationsdatei zu haben, können Sie stattdessen mit der zweiten Zeile fortfahren (dies macht die Absicht sicherlich offensichtlicher, vorausgesetzt, Ihr Editor und Ihre Shell können die Codierung der Datei ordnungsgemäß verarbeiten).

Dann könnten Sie es so verwenden:

PS1="$(tmux_winidx_circled) \W➤ "
Chris Johnsen
quelle
3

Alles was ich brauchte war zu flashen und die tmux Nachricht zu extrahieren, wenn ich die Shell startete und diese speicherte. 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 so aus:

[2] ~➤  

und was übrig bleibt, ist das Parsen zu verbessern und reguläre Ziffern durch hübsche Unicode-Zeichen mit eingekreisten Ziffern zu ersetzen - aber das ist eine andere Geschichte.

Wojtek Kruszewski
quelle