Obtener el número de ventana actual para el indicador de bash

Obtener el número de ventana actual para el indicador de bash

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

Hay una variable de entorno TMUX_PANE, desafortunadamente no hay TMUX_WINDOW.

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

Respuesta1

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

tmux display-message -p '#I'

Podrías convertir a los números encerrados en un círculo como este (intentosintaxis; 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 agradable porque es ASCII puro; Si no le importa tener caracteres que no sean ASCII en su archivo de configuración, entonces puede usar la segunda línea (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➤ "

Respuesta2

Todo lo que necesitaba era flashear y extraer el mensaje tmux al iniciar el shell y almacenarlo. ¡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 mensaje se ve así:

[2] ~➤  

y lo que queda es mejorar el análisis y sustituir los dígitos normales por bonitos caracteres Unicode con un círculo, pero esa es otra historia.

información relacionada