Różnica między opcjami global, server, session i window

19

W tmux ręczne omówione różne rodzaje opcji, na przykład opcje globalne , opcje serwera i tak dalej. Pytanie Gdzie jest domyślny plik konfiguracyjny tmux? odnosi się również do niektórych z tych typów konfiguracji.

Niektóre z tych typów są łatwe do zrozumienia: opcje okna dotyczą rzeczy, które dotyczą tylko jednego okna. Na przykład „zezwól na zmianę nazwy”: okna mają nazwy, sesje nie. Jednak w przypadku innych typów rozróżnienie nie jest bardzo jasne.

Jaka jest różnica pomiędzy

  • opcje serwera ( set-option -s),
  • globalne opcje sesji ( set-option -g),
  • opcje sesji ( set-option),
  • globalne opcje okna ( set-window-option -g),
  • opcje okna ( set-window-option)?

Jakie są reguły dziedziczenia dla tych typów?

gioele
źródło

Odpowiedzi:

31

Istnieją trzy różne klasy opcji: serwer, sesja i okno. Te klasy są wyłączne: każda opcja należy tylko do jednej z klas. Nigdy nie ma dziedziczenia między klasami opcji.

Istnieje tylko jeden poziom opcji serwera, więc nie ma tam dziedziczenia (chociaż możesz mieć wiele niezależnych serwerów za pomocą flag -Llub -Swiersza poleceń).

Każda z opcji sesji i okna korzysta z dwupoziomowej hierarchii: globalne opcje sesji (okna) zapewniają domyślne wartości dla opcji sesji (okna), które są nieaktywne. Opcje sesji i okna są początkowo wyłączone, więc nowe sesje / okna będą automatycznie wykorzystywać globalne wartości opcji sesji / okna.

Gdy ustawiona jest opcja sesji ( set-option), nowo ustawiona wartość zastąpi wartość globalną dla tej sesji. Aby wrócić do korzystania z wartości globalnej, wyłącz opcję ( set-option -u). Zmiany wartości opcji globalnej sesji wpłyną na wszystkie sesje, w których ta opcja jest obecnie rozbrojona. Ten sam pomysł dotyczy opcji okna (z wyjątkiem ustawienia opcji okna zastępuje wartość dla pojedynczego okna zamiast pojedynczej sesji).


Na przykład, aby znaleźć efektywną wartość base-indexopcji sesji dla określonej sesji:

  • Sprawdź base-indexopcję sesji (tj. Co otrzymujesz z tmux -t «target-session» show-options base-index* ).
    1. Jeśli sesja ma base-indexwartość, użyj jej.
    2. Jeśli wartość sesji nie została ustawiona, użyj wartości globalnej (tj. Tego, co otrzymujesz tmux show-options -g base-index).

Podobnie, aby znaleźć wartość skuteczną dla mode-keysopcji okna dla określonego okna:

  • Sprawdź mode-keysopcję okna (tj. Co otrzymujesz z tmux -t «target-window» show-options -w mode-keys** ).
    1. Jeśli okno ma mode-keyswartość, użyj jej.
    2. Jeśli wartość okna nie została ustawiona, użyj wartości globalnej (tj. Tego, co otrzymujesz tmux show-options -gw mode-keys).

* Starsze wersje tmux nie akceptują argumentu nazwy opcji dla show-options. Z tych wersji trzeba będzie coś zrobić jak grep na to: tmux -t target show-options | grep '^base-index '.
** To jest to samo tmux show-window-options base-index, jeśli bardziej ci się to podoba. Powiązane polecenie dla opcji globalnego okna to tmux show-window-options -g base-index.


Oto schemat:

                 .---------------.
                ( 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
źródło
Aby wykluczyć opcje serwera z globalnych: Opcje serwera to opcje, które nie są stosowane do opcji sesji lub okna. Jest tylko kilka opcji serwera, które można wymienić show -s. Jednak z punktu widzenia użytkowania opcje serwera nie są konieczne IMHO.
Bohr
1
Chodzi mi o to, że chciałbym, aby opcje serwera mogły być również określane -gi usuwane -sze względu na prostotę UX. Po prostu nie mam żadnych korzyści, wiedząc, że opcja jest opcją serwera.
Bohr