Quero substituir a barra de status pelo prompt do bash exibindo o número da janela como ①. Como posso obter o número da janela atual no shell?
Existe a variável env TMUX_PANE, infelizmente não há TMUX_WINDOW.
O mais próximo que cheguei foi:
tmux display-message
atualizar as informações da janela/painel, pegar a última linha tmux show-messages
e analisá-la. Não quero que as informações da janela/painel pisquem sempre que o prompt for exibido.
Responder1
Você pode usar display-message -p
para enviar a saída para stdout para evitar extraí-la da saída de show-messages
:
tmux display-message -p '#I'
Você poderia converter para os números circulados como este (festasintaxe; testado com versões 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
}
A primeira linha é boa porque é ASCII puro; se você não se importa em ter caracteres não-ASCII em seu arquivo de configuração, então você pode usar a segunda linha (certamente torna a intenção mais óbvia, assumindo que seu editor e shell possam lidar adequadamente com a codificação do arquivo).
Então você poderia usá-lo assim:
PS1="$(tmux_winidx_circled) \W➤ "
Responder2
Tudo que eu precisava era atualizar e extrair a mensagem tmux ao iniciar o shell e armazená-la. 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➤ "
Agora meu prompt se parece com:
[2] ~➤
e o que resta é melhorar a análise e substituir dígitos regulares por lindos caracteres de dígitos circulados em Unicode - mas isso é outra história.