Différence entre les options globales, serveur, session et fenêtre

19

Le manuel tmux décrit différents types d'options, par exemple les options globales , les options de serveur, etc. La question Où est le fichier de configuration tmux par défaut? fait également référence à certains de ces types de configuration.

Certains de ces types sont faciles à comprendre: les options de fenêtre traitent de choses qui ne concernent qu'une seule fenêtre. Par exemple, "allow-rename": les fenêtres ont des noms, les sessions non. Pour d'autres types, cependant, la distinction n'est pas très claire.

Quelle est la différence entre

  • options de serveur ( set-option -s),
  • options de session globale ( set-option -g),
  • options de session ( set-option),
  • options de fenêtre globale ( set-window-option -g),
  • options de fenêtre ( set-window-option)?

De plus, quelles sont les règles d'héritage pour ces types?

gioele
la source

Réponses:

30

Il existe trois classes distinctes d'options: serveur, session et fenêtre. Ces classes sont exclusives: chaque option n'appartient qu'à une seule des classes. Il n'y a jamais d'héritage entre les classes d'options.

Il n'y a qu'un seul niveau d'options de serveur, il n'y a donc pas d'héritage (bien que vous puissiez avoir plusieurs serveurs indépendants en utilisant les drapeaux de ligne de commande -Lou -S).

Les options de session et de fenêtre utilisent chacune une hiérarchie à deux niveaux: les options globales de session (fenêtre) fournissent des valeurs par défaut pour les options de session (fenêtre) qui ne sont pas définies. Les options de session et de fenêtre sont toutes initialement non définies, donc les nouvelles sessions / fenêtres utiliseront automatiquement les valeurs globales des options de session / fenêtre.

Lorsqu'une option de session est définie ( set-option), la nouvelle valeur définie remplace la valeur globale de cette session. Pour revenir à l'utilisation de la valeur globale, désactivez l'option ( set-option -u). Les modifications apportées aux valeurs des options de session globales affecteront toutes les sessions dans lesquelles cette option est actuellement non définie. La même idée s'applique aux options de fenêtre (sauf que la définition d'une option de fenêtre remplace la valeur d'une fenêtre individuelle au lieu d'une session individuelle).


Par exemple, pour trouver la valeur effective de l' base-indexoption de session pour une session particulière:

  • Vérifiez l' base-indexoption de la session (c'est-à-dire ce que vous obtenez tmux -t «target-session» show-options base-index* ).
    1. Si la session a une base-indexvaleur, utilisez-la.
    2. Si la valeur de la session n'a pas été définie, utilisez la valeur globale (c'est-à-dire ce que vous obtenez tmux show-options -g base-index).

De même, pour trouver la valeur effective de l' mode-keysoption de fenêtre pour une fenêtre particulière:

  • Vérifiez l' mode-keysoption de la fenêtre (c'est-à-dire ce que vous obtenez de tmux -t «target-window» show-options -w mode-keys** ).
    1. Si la fenêtre a une mode-keysvaleur, utilisez-la.
    2. Si la valeur de la fenêtre n'a pas été définie, utilisez la valeur globale (c'est-à-dire ce que vous obtenez tmux show-options -gw mode-keys).

* Les versions plus anciennes de tmux n'acceptent pas d'argument de nom d'option pour show-options. Avec ces versions , vous aurez à faire quelque chose comme grep pour elle: tmux -t target show-options | grep '^base-index '.
** C'est la même chose que tmux show-window-options base-indexsi vous préférez ça. La commande associée pour les options de fenêtre globale est tmux show-window-options -g base-index.


Voici un schéma:

                 .---------------.
                ( 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
la source
Pour distinguer les options de serveur des options globales: Les options de serveur sont des options qui ne sont appliquées ni aux options de session ni aux options de fenêtre. Et il n'y a que quelques options de serveur qui peuvent être répertoriées par show -s. Cependant, du point de vue de l'utilisation, les options de serveur ne sont pas nécessaires à mon humble avis.
Bohr
1
Je veux dire que je souhaite que les options du serveur puissent également être spécifiées avec -get supprimées -sjuste pour des raisons de simplicité UX. Je n'obtiens aucun avantage en sachant qu'une option est une option de serveur.
Bohr