Diferença entre opções globais, de servidor, sessão e janela


19

O manual do tmux discute vários tipos de opções, por exemplo , opções globais , opções do servidor e assim por diante. A pergunta Onde está o arquivo de configuração padrão do tmux? também se refere a alguns desses tipos de configuração.

Alguns desses tipos são fáceis de entender: as opções de janela lidam com coisas que se relacionam apenas a uma única janela. Por exemplo "allow-rename": janelas têm nomes, sessões não. Para outros tipos, no entanto, a distinção não é muito clara.

Qual é a diferença entre

  • opções de servidor ( set-option -s),
  • opções globais de sessão ( set-option -g),
  • opções de sessão ( set-option),
  • opções globais de janela ( set-window-option -g),
  • opções da janela ( set-window-option)?

Além disso, quais são as regras de herança para esses tipos?

Respostas:


30

Existem três classes distintas de opções: servidor, sessão e janela. Essas classes são exclusivas: cada opção pertence a apenas uma das classes. Nunca há herança entre as classes de opção.

Há apenas um nível de opções de servidor; portanto, não há herança (embora você possa ter vários servidores independentes usando os sinalizadores de linha de comando -Lou -S).

As opções de sessão e janela usam uma hierarquia de dois níveis: as opções globais de sessão (janela) fornecem valores padrão para as opções de sessão (janela) não definidas. As opções de sessão e janela são todas desmarcadas inicialmente, portanto, novas sessões / janelas usarão automaticamente os valores globais das opções de sessão / janela.

Quando uma opção de sessão é configurada ( set-option), o novo valor definido substituirá o valor global para essa sessão. Para voltar a usar o valor global, desmarque a opção ( set-option -u). As alterações nos valores das opções globais da sessão afetarão todas as sessões nas quais essa opção está desmarcada no momento. A mesma idéia se aplica às opções da janela (exceto a configuração de uma opção de janela substitui o valor de uma janela individual em vez de uma sessão individual).


Por exemplo, para encontrar o valor efetivo da base-indexopção de sessão para uma sessão específica:

  • Verifique a base-indexopção da sessão (ou seja, o que você obtém de tmux -t «target-session» show-options base-index* ).
    1. Se a sessão tiver um base-indexvalor, use-o.
    2. Se o valor da sessão não foi definido, use o valor global (ou seja, o que você obtém tmux show-options -g base-index).

Da mesma forma, para encontrar o valor efetivo da mode-keysopção da janela para uma janela específica:

  • Marque a mode-keysopção da janela (ou seja, o que você obtém de tmux -t «target-window» show-options -w mode-keys** ).
    1. Se a janela tiver um mode-keysvalor, use-o.
    2. Se o valor da janela não foi definido, use o valor global (ou seja, o que você obtém tmux show-options -gw mode-keys).

* As versões mais antigas do tmux não aceitam um argumento de nome de opção para show-options. Com essas versões que você terá que fazer algo como grep para isso: tmux -t target show-options | grep '^base-index '.
** É o mesmo que tmux show-window-options base-index, se você preferir. O comando relacionado para as opções da janela global é tmux show-window-options -g base-index.


Aqui está um 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)

Para excluir opções globais do servidor: Opções do servidor são opções não aplicadas às opções de sessão ou janela. E há apenas algumas opções de servidor que podem ser listadas por show -s. No entanto, da perspectiva do uso, as opções do servidor não são necessárias IMHO.
Bohr

1
Quero dizer, desejo que as opções do servidor também possam ser especificadas -ge removidas -spor uma questão de simplicidade do UX. Só não recebo nenhum benefício sabendo que uma opção é uma opção de servidor.
Bohr
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.