tuning navigate how help command-line title tmux pane

command-line - navigate - tmux skins



Título del panel en Tmux (7)

Esta funcionalidad se ha agregado a tmux git en este compromiso . No está en la versión 2.2, pero parece que estará en 2.3.

Para habilitarlo:

tmux set -g pane-border-status top

o si prefieres:

tmux set -g pane-border-status bottom

Para establecer un texto personalizado como línea de estado de borde de panel, puede utilizar el pane-border-format de pane-border-format , por ejemplo:

tmux set -g pane-border-format "#{pane_index} #{pane_current_command}"

En mi máquina local tengo 3 instancias de node.js ejecutándose simultáneamente. Cada uno tiene su propio panel en una ventana tmux llamada "servidores". El problema es que no es tan fácil averiguar qué nodo se está ejecutando en qué panel, porque sus registros son similares.

Lo que necesito es un título para cada panel. Como obtuve, tmux en sí no tiene la característica: solo tiene títulos para ventanas y no para paneles. Lanzar una sesión tmux separada dentro de cada panel para cada instancia de node.js parece una exageración.

Entonces, ¿hay algún programa pequeño que ejecute un comando y ajuste su salida con una barra de estado específica?

Gracias por adelantado



Estoy trabajando en la barra de estado del panel para tmux-ticket. Mi rama de desarrollo se puede encontrar aquí en github: https://github.com/jonathanslenders/tmux

En este momento, esto ya agrega un comando de "título" del panel de cambio de nombre de trabajo. Todavía hay algunos errores, y la API mejorará. La idea es crear una barra de estado por panel, que puede tener algún formato, como la barra de estado de la sesión. Al igual que el resto de tmux, todo debería convertirse en un script y ser personalizable. Cuando esté terminado y estable, probablemente se incluirá en el tmux oficial.


Estoy usando la versión 2.3 de tmux, creo que el estilo de borde no es compatible con versiones anteriores. esto es lo que funcionó para mí:

Para cada panel establece el título:

printf ''/033]2;My Pane Title/033//'

Entonces:

tmux set -g pane-border-format "#{pane_index} #T"


Sí, hay tal comando: tmux . Asigne un nombre a su sesión y se mostrará en una barra de estado interna:

TMUX=0 tmux new-session -s my-new-session


tmux admite títulos por panel, pero no proporciona una ubicación por panel para mostrar estos títulos.

Puede establecer el título de un panel con la secuencia de escape ESC ]2; ... ESC / (p. Ej., Consulte la sección denominada Nombres y títulos en la página de manual de tmux ). Podrías hacer esto desde el shell como este

printf ''/033]2;%s/033//' ''title goes here''

El título de cada panel por defecto es el nombre de host del sistema. De forma predeterminada, el título del panel activo se muestra en el lado derecho de la línea de estado de tmux (el valor global predeterminado de la variable de status-right de la sesión es "#22T" %H:%M %d-%b-%y , que muestra 22 caracteres del título del panel, la hora y la fecha).

Por lo tanto, siempre que esté satisfecho con la posibilidad de ver el título del panel activo (es decir, que desee cambiar los paneles para ver el título de un panel inactivo), puede obtener la funcionalidad predeterminada. Simplemente envíe la secuencia de escape de configuración de título adecuada antes de iniciar el comando principal para cada panel.

Si necesita absolutamente una línea dedicada para mostrar cierta información por panel, entonces las sesiones tmux anidadas pueden no ser tan "innecesarias" como una "exageración" como podría pensar.

En el caso general, para proporcionar una línea de estado inviolable en un terminal determinado, necesitará un (em) emulador (re) de terminal completo que se ubique entre el terminal original y un nuevo terminal (uno con una línea menos). Dicha (re) emulación es necesaria para traducir las secuencias de control enviadas al terminal interno y traducirlas para el terminal original. Por ejemplo, para mantener una línea de estado en la parte inferior del terminal externo, el comando

Mover a la última línea.

enviado a la terminal interna debe ser convertido

Mover a la siguiente a la última línea.

cuando se traduce y se envía al terminal exterior. Asimismo, un LF enviado al terminal interno debe convertirse

Si el cursor está en la línea siguiente a la última, desplace esta línea y todas las líneas sobre una línea hacia arriba para proporcionar una línea clara de la línea anterior a la última (protegiendo la línea de estado en la última línea). De lo contrario, envíe un LF.

en el terminal exterior.

Programas como tmux y pantalla son simplemente tales emuladores de terminal. Claro, hay un montón de otras funcionalidades envueltas alrededor del emulador de terminal, pero necesitaría una gran parte del código de emulación de terminal para proporcionar una línea de estado confiable .

Existe, sin embargo, una solución liviana siempre que

  1. sus programas (instancias de Node.js ) tienen interacciones de terminal limitadas con los paneles en los que se están ejecutando (es decir, sin posicionamiento del cursor), y
  2. no cambia el tamaño de los paneles mientras se ejecutan sus programas.

Al igual que muchos emuladores de terminal, tmux admite un comando de control de terminal "establecer región de desplazamiento" en sus paneles. Puede usar este comando para limitar la región de desplazamiento a las líneas N-1 superior (o inferior) del terminal y escribir algún tipo de texto de identificación de instancia en la línea de no desplazamiento.

Las restricciones (no se permiten comandos de movimiento del cursor, ni cambio de tamaño) son necesarias porque el programa que genera la salida (por ejemplo, una instancia de Node.js ) no tiene idea de que el desplazamiento se haya limitado a una región en particular. Si sucedió que el programa que genera la salida mueve el cursor fuera de la región de desplazamiento, entonces la salida podría aparecer distorsionada. Del mismo modo, el emulador de terminal probablemente restablece automáticamente la región de desplazamiento cuando se redimensiona el terminal (por lo que la "línea de no desplazamiento" probablemente terminará desplazándose).

Escribí un script que usa tput para generar las secuencias de control apropiadas, escribo en la línea de no desplazamiento y ejecuto un programa después de mover el cursor a la región de desplazamiento:

#!/bin/sh # usage: no_scroll_line top|bottom ''non-scrolling line content'' command to run with args # # Set up a non-scrolling line at the top (or the bottom) of the # terminal, write the given text into it, then (in the scrolling # region) run the given command with its arguments. When the # command has finished, pause with a prompt and reset the # scrolling region. get_size() { set -- $(stty size) LINES=$1 COLUMNS=$2 } set_nonscrolling_line() { get_size case "$1" in t|to|top) non_scroll_line=0 first_scrolling_line=1 scroll_region="1 $(($LINES - 1))" ;; b|bo|bot|bott|botto|bottom) first_scrolling_line=0 scroll_region="0 $(($LINES - 2))" non_scroll_line="$(($LINES - 1))" ;; *) echo ''error: first argument must be "top" or "bottom"'' exit 1 ;; esac clear tput csr $scroll_region tput cup "$non_scroll_line" 0 printf %s "$2" tput cup "$first_scrolling_line" 0 } reset_scrolling() { get_size clear tput csr 0 $(($LINES - 1)) } # Set up the scrolling region and write into the non-scrolling line set_nonscrolling_line "$1" "$2" shift 2 # Run something that writes into the scolling region "$@" ec=$? # Reset the scrolling region printf %s ''Press ENTER to reset scrolling (will clear screen)'' read a_line reset_scrolling exit "$ec"

Podrías usarlo así:

tmux split-window ''/path/to/no_scroll_line bottom "Node instance foo" node foo.js'' tmux split-window ''/path/to/no_scroll_line bottom "Node instance bar" node bar.js'' tmux split-window ''/path/to/no_scroll_line bottom "Node instance quux" node quux.js''

La secuencia de comandos también debe funcionar fuera de tmux siempre que el terminal admita y publique sus capacidades de terminos csr y cup .


Un gif vale más que mil palabras. ( source )

tmux-xpanes es un divisor de terminal basado en tmux, que admite la visualización de títulos para cada panel a través de la opción -t recién agregada.