Como personalizar o 'marcador da última janela' do tmux?

Como personalizar o 'marcador da última janela' do tmux?

Por padrão, o Tmux é exibido -após o título da janela para indicar a última janela visitada. Existe uma maneira de personalizar este marcador e configurá-lo como um símbolo personalizado? Obrigado,

Responder1

man 1 tmuxdiz:

Por padrão, a lista de janelas mostra o índice, o nome e (se houver) o sinalizador das janelas presentes na sessão atual em ordem numérica crescente. Pode ser personalizado com as opções window-status-formate window-status-current-format. A bandeira é um dos seguintes símbolos anexados ao nome da janela:

Symbol    Meaning
*         Denotes the current window.
-         Marks the last window (previously selected).
#         Window is monitored and activity has been detected.
!         A bell has occurred in the window.
~         The window has been silent for the monitor-silence interval.
M         The window contains the marked pane.
Z         The window's active pane is zoomed.

Sobre set-window-option window-status-format:

window-status-format string
Defina o formato no qual a janela será exibida na lista de janelas da linha de status. […] O padrão é #I:#W#F.

Então FORMATSvocê aprende #Fque significa "sinalizadores de janela". Não encontrei nenhum vestígio de capacidade de alterar diretamente os símbolos associados às bandeiras. Ainda assim você pode usar isto:

Além disso, a primeira linha da saída de um comando shell pode ser inserida usando #().

Isso significa que você pode usar trou sedmudar -para outra coisa. Você pode ficar alarmado com isso:

Ao construir formatos, tmuxnão espera #()o término dos comandos; em vez disso, é usado o resultado anterior da execução do mesmo comando ou um espaço reservado se o comando não tiver sido executado antes.

Ainda em meus testes, substituições simples trou sedparecem funcionar imediatamente, então provavelmente não há nada com que se preocupar. De dentro, tmuxexecute isto:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"

ou isto:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/</')"

Eu recomendo trporque é mais simples e menor que o sed, deve ter um desempenho melhor (se for importante). Mas se você quiser substituir por alguma string *- com vários caracteres, essa é a sua ferramenta. Exemplo:sed

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/<--/')"

Notas:

  • %%em vez de %é por causa do tmuxanalisador.
  • tmux set-window-option window-status-format …(sem -g) especifica o formato para uma única janela; isso terá precedência sobre o formato global desta janela específica.
  • Há também window-status-current-formatqual especifica o formato usado quando a janela é a janela atual. O sinalizador "última janela" obviamente nunca se aplica à janela atual, mas se você quiser personalizar os sinalizadores que podem ser aplicados, você window-status-current-formattambém precisará alterar.
  • Uma linha para adicionar /etc/tmux.confou ~/.tmux.confé como:

    set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
    

* Ou melhor, multibyte. Compararesse.

Responder2

Não sei quando isso foi adicionado, mas você pode realizar a substituição de regex pelo formato tmux, o que torna mais simples conseguir isso. Na página de manual:

A prefix of the form ‘s/foo/bar/:’ will substitute ‘foo’ with ‘bar’ throughout.
The first argument may be an extended regular expression and a final argument may be ‘i’ to ignore case, for example:
 ‘s/a(.)/\1x/i:’ would change ‘abABab’ into ‘bxBxbx’.

Portanto, para o seu caso de uso, você pode substituir o window_flagsconteúdo da variável assim:

set-window-option -g window-status-format "  #{s/-/>>/:window_flags} #I #W"

informação relacionada