Obtém o número da janela atual para o prompt do bash

10

Eu quero substituir a barra de status com o prompt bash exibindo o número da janela como ①. Como posso obter o número da janela atual no shell?

Existe uma variável env TMUX_PANE, infelizmente não TMUX_WINDOW.

O mais próximo que eu tenho é: tmux display-message para exibir informações de janela / painel, depois pegue a última linha de tmux show-messages e analise-a. Não quero que as informações da janela / painel pisquem sempre que o prompt for exibido.

    
por Wojtek Kruszewski 03.02.2012 / 07:18

2 respostas

13

Você pode usar display-message -p para enviar a saída para stdout para evitar a extração da saída de show-messages :

tmux display-message -p '#I'

Você pode converter para números circulados como este ( bash sintaxe; testado com as 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 é legal porque é pura ASCII; se você não se importar de ter caracteres não-ASCII no seu arquivo de configuração, então você pode ir com a segunda linha (certamente torna a intenção mais óbvia, supondo que seu editor e shell possam manipular corretamente a codificação do arquivo).

Então você poderia usá-lo assim:

PS1="$(tmux_winidx_circled) \W➤ "
    
por 04.02.2012 / 09:35
3

Tudo que eu precisava era de flash e extrair a mensagem do tmux ao iniciar o shell e armazenar isso. 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 parece:

[2] ~➤  

e o que resta é melhorar a análise e substituir os dígitos regulares por caracteres de dígitos bastante circulares Unicode - mas isso é outra história.

    
por 03.02.2012 / 07:53