Diferencia entre opciones globales, de servidor, de sesión y de ventana

19

El manual de tmux analiza varios tipos de opciones, por ejemplo , opciones globales , opciones de servidor, etc. La pregunta ¿Dónde está el archivo de configuración tmux predeterminado? También se refiere a algunos de estos tipos de configuración.

Algunos de estos tipos son fáciles de entender: las opciones de ventana se ocupan de cosas que se relacionan solo con una sola ventana. Por ejemplo "permitir-renombrar": las ventanas tienen nombres, las sesiones no. Para otros tipos, sin embargo, la distinción no es muy clara.

Cuál es la diferencia entre

  • opciones del servidor ( set-option -s),
  • opciones de sesión global ( set-option -g),
  • opciones de sesión ( set-option),
  • opciones de ventana global ( set-window-option -g),
  • opciones de ventana ( set-window-option)?

Además, ¿cuáles son las reglas de herencia para estos tipos?

gioele
fuente

Respuestas:

30

Hay tres clases distintas de opciones: servidor, sesión y ventana. Estas clases son exclusivas: cada opción pertenece solo a una de las clases. Nunca hay ninguna herencia entre las clases de opciones.

Solo hay un nivel de opciones de servidor, por lo que no hay herencia allí (aunque puede tener varios servidores independientes utilizando los indicadores de línea de comando -Lo -S).

Las opciones de sesión y ventana utilizan una jerarquía de dos niveles: las opciones de sesión global (ventana) proporcionan valores predeterminados para las opciones de sesión (ventana) que no están configuradas. Las opciones de sesión y ventana están inicialmente desarmadas, por lo que las nuevas sesiones / ventanas usarán automáticamente los valores de opción de sesión / ventana global.

Cuando se establece una opción de sesión ( set-option), el valor recién establecido anulará el valor global para esa sesión. Para volver a usar el valor global, desactive la opción ( set-option -u). Los cambios en los valores de la opción de sesión global afectarán a todas las sesiones en las que esa opción no esté configurada actualmente. La misma idea se aplica a las opciones de la ventana (excepto que establecer una opción de ventana anula el valor de una ventana individual en lugar de una sesión individual).


Por ejemplo, para encontrar el valor efectivo de la base-indexopción de sesión para una sesión particular:

  • Verifique la base-indexopción de la sesión (es decir, lo que obtiene de tmux -t «target-session» show-options base-index* ).
    1. Si la sesión tiene un base-indexvalor, úselo.
    2. Si no se configuró el valor de la sesión, utilice el valor global (es decir, de qué obtiene tmux show-options -g base-index).

Del mismo modo, para encontrar el valor efectivo de la mode-keysopción de ventana para una ventana en particular:

  • Verifique la mode-keysopción de la ventana (es decir, lo que obtiene de tmux -t «target-window» show-options -w mode-keys** ).
    1. Si la ventana tiene un mode-keysvalor, úselo.
    2. Si no se configuró el valor de la ventana, utilice el valor global (es decir, de qué obtiene tmux show-options -gw mode-keys).

* Las versiones anteriores de tmux no aceptan un argumento de nombre de opción para show-options. Con estas versiones, tendrá que hacer algo como grep para ello: tmux -t target show-options | grep '^base-index '.
** Esto es lo mismo que tmux show-window-options base-index, si te gusta más. El comando relacionado para las opciones de la ventana global es tmux show-window-options -g base-index.


Aquí hay un diagrama:

                 .---------------.
                ( server options  )
                 `---------------'

===========================================================

              .----------------------.
             ( global session options )    base-index 1
              `---------+--+---------'     visual-bell on
                     --/    \--
                  --/          \--
           +-----/-----+    +-----\-----+
           | session X |    | session Y |
           +-----------+    +-----------+
           base-index 0     visual-bell off

  effective values for X:
      base-index 0     (set)
      visual-bell on   (global)

  effective values for Y:
      base-index 1     (global)
      visual-bell off  (set)

===========================================================

              .---------------------.
             ( global window options )    pane-base-index 1
              `---------+++---------'     mode-keys emacs
                    ---/ | \---
                 --/     |     \---
             ---/        |         \---
         ---/            |             \---
+-------/----+    +------+-----+    +------\-----+
| window X.0 |    | window X.1 |    | window Y.0 |
+------------+    +------------+    +------------+
pane-base-index 0                   mode-keys vi
mode-keys vi

  effective values for X.0:
      pane-base-index 0   (set)
      mode-keys vi        (set)

  effective values for X.1:
      pane-base-index 1   (global)
      mode-keys emacs     (global)

  effective values for Y.0:
      pane-base-index 1   (global)
      mode-keys vi        (set)
Chris Johnsen
fuente
Para distinguir las opciones del servidor de las globales: las opciones del servidor son opciones que no se aplican a las opciones de sesión o ventana. Y solo hay algunas opciones de servidor que se pueden enumerar show -s. Sin embargo, desde la perspectiva de uso, las opciones del servidor no son necesarias en mi humilde opinión.
Bohr
1
Quiero decir que deseo que las opciones del servidor también se puedan especificar -gy eliminar -ssolo por simplicidad UX. Simplemente no obtengo ningún beneficio al saber que una opción es una opción de servidor.
Bohr