Differenza tra opzioni globali, server, sessione e finestra


19

Il manuale di tmux discute vari tipi di opzioni, ad esempio opzioni globali , opzioni del server e così via. La domanda Dov'è il file di configurazione predefinito di tmux? fa riferimento anche ad alcuni di questi tipi di configurazione.

Alcuni di questi tipi sono facili da capire: le opzioni della finestra trattano cose che riguardano solo una singola finestra. Ad esempio "allow-rename": le finestre hanno nomi, le sessioni no. Per altri tipi, tuttavia, la distinzione non è molto chiara.

Qual è la differenza tra

  • opzioni server ( set-option -s),
  • opzioni di sessione globale ( set-option -g),
  • opzioni di sessione ( set-option),
  • global window options ( set-window-option -g),
  • opzioni finestra ( set-window-option)?

Inoltre, quali sono le regole di ereditarietà per questi tipi?

Risposte:


30

Esistono tre classi distinte di opzioni: server, sessione e finestra. Queste classi sono esclusive: ogni opzione appartiene a una sola delle classi. Non c'è mai eredità tra le classi di opzioni.

Esiste un solo livello di opzioni del server, quindi non vi è ereditarietà (sebbene sia possibile avere più server indipendenti utilizzando i flag della riga di comando -Lo -S).

Le opzioni di sessione e finestra utilizzano ciascuna una gerarchia a due livelli: le opzioni di sessione globale (finestra) forniscono valori predefiniti per le opzioni di sessione (finestra) non impostate. Le opzioni di sessione e finestra non sono tutte inizialmente impostate, quindi le nuove sessioni / finestre useranno automaticamente i valori globali dell'opzione sessione / finestra.

Quando viene impostata un'opzione di sessione ( set-option), il valore appena impostato sovrascriverà il valore globale per quella sessione. Per tornare a utilizzare il valore globale, deselezionare l'opzione ( set-option -u). Le modifiche ai valori dell'opzione di sessione globale avranno effetto su tutte le sessioni in cui tale opzione non è attualmente impostata. La stessa idea si applica alle opzioni della finestra (tranne che per l'impostazione di un'opzione della finestra ha la precedenza sul valore di una singola finestra anziché di una singola sessione).


Ad esempio, per trovare il valore effettivo per l' base-indexopzione di sessione per una determinata sessione:

  • Controlla l' base-indexopzione della sessione (cioè da cosa ottieni tmux -t «target-session» show-options base-index* ).
    1. Se la sessione ha un base-indexvalore, quindi usalo.
    2. Se il valore della sessione non è stato impostato, utilizzare il valore globale (ovvero da cosa si ottiene tmux show-options -g base-index).

Allo stesso modo, per trovare il valore effettivo per l' mode-keysopzione finestra per una finestra particolare:

  • Controlla l' mode-keysopzione della finestra (es. Da cosa ottieni tmux -t «target-window» show-options -w mode-keys** ).
    1. Se la finestra ha un mode-keysvalore, allora usalo.
    2. Se il valore della finestra non è stato impostato, utilizzare il valore globale (ovvero da cosa si ottiene tmux show-options -gw mode-keys).

* Le versioni precedenti di tmux non accettano un argomento per il nome dell'opzione per show-options. Con queste versioni si dovrà fare qualcosa di simile grep per esso: tmux -t target show-options | grep '^base-index '.
** È lo stesso di tmux show-window-options base-index, se ti piace di più. Il comando correlato per le opzioni della finestra globale è tmux show-window-options -g base-index.


Ecco un diagramma:

                 .---------------.
                ( 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)

Per distinguere le opzioni del server da quelle globali: Le opzioni del server sono opzioni non applicate alle opzioni di sessione o finestra. E ci sono solo alcune opzioni del server che possono essere elencate da show -s. Tuttavia, dal punto di vista dell'utilizzo, le opzioni del server non sono necessarie IMHO.
Bohr,

1
Voglio dire, vorrei che le opzioni del server possano anche essere specificate -ge rimosse -ssolo per semplicità di UX. Semplicemente non ottengo alcun vantaggio sapendo che un'opzione è un'opzione server.
Bohr,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.