Ottieni il numero della finestra corrente per il prompt di bash


11

Voglio sostituire la barra di stato con il prompt di bash che mostra il numero della finestra come ①. Come posso ottenere il numero della finestra corrente nella shell?

C'è una variabile env TMUX_PANE, sfortunatamente nessuna TMUX_WINDOW.

Il più vicino che ho è: tmux display-messageper visualizzare le informazioni sulla finestra / riquadro, quindi prendere l'ultima riga tmux show-messagese analizzarla. Non voglio che le informazioni sulla finestra / riquadro lampeggino ogni volta che viene visualizzato il prompt.

Risposte:


14

È possibile utilizzare display-message -pper inviare l'output a stdout per evitare di doverlo estrarre dall'output di show-messages:

tmux display-message -p '#I'

È possibile convertire in numeri cerchiati come questo ( sintassi bash ; testato con le versioni 3.2.48 e 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
}

La prima riga è bella in quanto è pura ASCII; se non ti dispiace avere caratteri non ASCII nel tuo file di configurazione, allora puoi andare con la seconda riga (certamente rende l'intento più ovvio, supponendo che l'editor e la shell possano gestire correttamente la codifica del file).

Quindi potresti usarlo in questo modo:

PS1="$(tmux_winidx_circled) \W➤ "

3

Tutto ciò di cui avevo bisogno era di flash ed estrarre il messaggio tmux all'avvio della shell e archiviarlo. 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➤ "

Ora il mio prompt è simile a:

[2] ~➤  

e ciò che resta è migliorare l'analisi e sostituire le cifre regolari con graziosi caratteri di cifre cerchiati Unicode - ma questa è un'altra storia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.