Unterschied zwischen globalen, Server-, Sitzungs- und Fensteroptionen

19

Die tmux Handbuch wird verschiedene Arten von Optionen, zum Beispiel globale Optionen , Serveroptionen und so weiter. Die Frage Wo ist die Standard-tmux-Konfigurationsdatei? bezieht sich auch auf einige dieser Konfigurationstypen.

Einige dieser Typen sind leicht zu verstehen: Fensteroptionen befassen sich mit Dingen, die sich nur auf ein einzelnes Fenster beziehen. Zum Beispiel "Erlauben-Umbenennen": Fenster haben Namen, Sitzungen nicht. Bei anderen Typen ist die Unterscheidung jedoch nicht sehr klar.

Was ist der Unterschied zwischen

  • Serveroptionen ( set-option -s),
  • globale Sitzungsoptionen ( set-option -g),
  • Sitzungsoptionen ( set-option),
  • globale Fensteroptionen ( set-window-option -g),
  • Fensteroptionen ( set-window-option)?

Welche Vererbungsregeln gelten für diese Typen?

gioele
quelle

Antworten:

30

Es gibt drei verschiedene Klassen von Optionen: Server, Sitzung und Fenster. Diese Klassen sind exklusiv: Jede Option gehört nur zu einer der Klassen. Es gibt niemals eine Vererbung zwischen den Optionsklassen.

Es gibt nur eine Ebene von Serveroptionen, daher gibt es dort keine Vererbung (obwohl Sie mehrere unabhängige Server verwenden können, indem Sie die Befehlszeilenflags -Loder verwenden -S).

Die Sitzungs- und Fensteroptionen verwenden jeweils eine zweistufige Hierarchie: Die globalen Sitzungsoptionen (Fensteroptionen) stellen Standardwerte für Sitzungsoptionen (Fensteroptionen) bereit, die nicht festgelegt sind. Sitzungs- und Fensteroptionen sind anfangs alle nicht festgelegt, sodass neue Sitzungen / Fenster automatisch die globalen Werte für Sitzungs- / Fensteroptionen verwenden.

Wenn eine Sitzungsoption festgelegt ist ( set-option), überschreibt der neu festgelegte Wert den globalen Wert für diese Sitzung. Deaktivieren Sie die Option ( set-option -u), um wieder den globalen Wert zu verwenden . Änderungen an den globalen Sitzungsoptionswerten wirken sich auf alle Sitzungen aus, in denen diese Option derzeit nicht festgelegt ist. Die gleiche Idee gilt für die Fensteroptionen (außer dass das Festlegen einer Fensteroption den Wert für ein einzelnes Fenster anstelle einer einzelnen Sitzung überschreibt).


So ermitteln Sie beispielsweise den effektiven Wert für die base-indexSitzungsoption für eine bestimmte Sitzung:

  • Aktivieren Sie die base-indexOption der Sitzung (dh was Sie von tmux -t «target-session» show-options base-index* erhalten ).
    1. Wenn die Sitzung einen base-indexWert hat, verwenden Sie ihn.
    2. Wenn der Wert der Sitzung nicht festgelegt wurde, verwenden Sie den globalen Wert (dh was Sie erhalten tmux show-options -g base-index).

So ermitteln Sie den effektiven Wert für die mode-keysFensteroption für ein bestimmtes Fenster:

  • Aktivieren Sie die mode-keysOption des Fensters (dh was Sie von tmux -t «target-window» show-options -w mode-keys** erhalten ).
    1. Wenn das Fenster einen mode-keysWert hat, verwenden Sie ihn.
    2. Wenn der Wert des Fensters nicht festgelegt wurde, verwenden Sie den globalen Wert (dh was Sie erhalten tmux show-options -gw mode-keys).

* Ältere Versionen von tmux akzeptieren kein Argument für den Optionsnamen für show-options. Mit diesen Versionen müssen Sie so etwas wie grep dafür tun : tmux -t target show-options | grep '^base-index '.
** Dies ist das gleiche wie tmux show-window-options base-index, wenn dir das besser gefällt. Der zugehörige Befehl für die globalen Fensteroptionen lautet tmux show-window-options -g base-index.


Hier ist ein Diagramm:

                 .---------------.
                ( 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
quelle
So unterscheiden Sie Serveroptionen von den globalen: Serveroptionen sind Optionen, die weder auf Sitzungs- noch auf Fensteroptionen angewendet werden. Und es gibt nur wenige Serveroptionen, die von aufgelistet werden können show -s. Aus Sicht der Nutzung sind IMHO jedoch keine Serveroptionen erforderlich.
Bohr
1
Ich meine, ich wünschte, Serveroptionen können auch nur der Einfachheit halber angegeben -gund entfernt werden -s. Ich bekomme einfach keinen Vorteil, wenn ich weiß, dass eine Option eine Serveroption ist.
Bohr