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-message
mostrar la información de la ventana/panel, luego tomar la última línea tmux show-messages
y analizarla. No quiero que la información de la ventana/panel parpadee cada vez que se muestra el mensaje.
Respuesta1
Puede utilizar display-message -p
para 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.