¿Cómo personalizar el 'marcador de última ventana' de tmux?

¿Cómo personalizar el 'marcador de última ventana' de tmux?

De forma predeterminada, Tmux se muestra -después del título de la ventana para indicar la última ventana visitada. ¿Hay alguna manera de personalizar este marcador y configurarlo como símbolo personalizado? Gracias,

Respuesta1

man 1 tmuxdice:

De forma predeterminada, la lista de ventanas muestra el índice, el nombre y (si corresponde) la bandera de las ventanas presentes en la sesión actual en orden numérico ascendente. Se puede personalizar con las opciones window-status-formaty window-status-current-format. La bandera es uno de los siguientes símbolos añadidos al nombre de la ventana:

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.

Acerca de set-window-option window-status-format:

window-status-format string
Establezca el formato en el que se muestra la ventana en la lista de ventanas de la línea de estado. […] El valor predeterminado es #I:#W#F.

Luego, debajo FORMATSaprenderá #Fque significa "banderas de ventana". No he encontrado ningún rastro de capacidad para cambiar los símbolos asociados con las banderas directamente. Aún así puedes usar esto:

Además, la primera línea de la salida de un comando de shell se puede insertar usando #().

Esto significa que puedes usar tro sedcambiarte -a otra cosa. Quizás te alarme esto:

Al construir formatos, tmuxno espera a que #()finalicen los comandos; en su lugar, se utiliza el resultado anterior de ejecutar el mismo comando, o un marcador de posición si el comando no se ha ejecutado antes.

Aún en mis pruebas, los reemplazos simples con tro sedparecen funcionar de inmediato, por lo que probablemente no haya nada de qué preocuparse. Desde dentro tmuxejecuta esto:

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

o esto:

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

Lo recomiendo trporque es más simple y más pequeño que sed, debería funcionar mejor (si es que importa). Pero si desea reemplazar con alguna cadena *- de varios caracteres, entonces esta es su herramienta. Ejemplo:sed

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

Notas:

  • %%en lugar de %es debido al tmuxanalizador.
  • tmux set-window-option window-status-format …(sin -g) especifica el formato para una sola ventana; esto tendrá prioridad sobre el formato global para esta ventana en particular.
  • También hay window-status-current-formatun formato que especifica el formato utilizado cuando la ventana es la ventana actual. Obviamente, el indicador de "última ventana" nunca se aplica a la ventana actual, pero si desea personalizar los indicadores que pueden aplicarse, window-status-current-formattambién debe modificarlos.
  • Una línea para agregar /etc/tmux.confo ~/.tmux.confes como:

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

* O más bien multibyte. Comparareste.

Respuesta2

No sé cuándo se agregó esto, pero puede realizar el reemplazo de expresiones regulares con el formato tmux, lo que hace que sea más sencillo lograrlo. Desde la 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’.

Entonces, para su caso de uso, puede realizar un reemplazo en el window_flagscontenido variable de esta manera:

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

información relacionada