Obtener el número de la ventana actual para bash prompt

11

Quiero reemplazar la barra de estado con bash prompt que muestra el número de ventana como ①. ¿Cómo puedo obtener el número de ventana actual en el shell?

Hay TMUX_PANE env variable, desafortunadamente no TMUX_WINDOW.

Lo más cercano que tengo es: tmux display-messagemostrar información de ventana / panel, luego tomar la última línea tmux show-messagesy analizarla. No quiero que la información de ventana / panel parpadee cada vez que se muestre el mensaje.

Wojtek Kruszewski
fuente

Respuestas:

14

Puede usar display-message -ppara enviar la salida a stdout para evitar tener que extraerla de la salida de show-messages:

tmux display-message -p '#I'

Puede convertir a los números en un círculo como este ( sintaxis bash ; probado con las versiones 3.2.48 y 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 primera línea es buena porque es ASCII puro; si no le importa tener caracteres que no sean ASCII en su archivo de configuración, entonces puede ir con la segunda línea en su lugar (ciertamente hace que la intención sea más obvia, suponiendo que su editor y shell puedan manejar adecuadamente la codificación del archivo).

Entonces podrías usarlo así:

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

Todo lo que necesitaba era flashear y extraer el mensaje tmux al iniciar el shell y almacenar esto. 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➤ "

Ahora mi aviso se ve así:

[2] ~➤  

y lo que queda es mejorar el análisis y sustituir los dígitos regulares con bonitos caracteres de dígitos en círculos Unicode, pero esa es otra historia.

Wojtek Kruszewski
fuente