Perbedaan antara opsi global, server, sesi dan jendela

19

Manual tmux membahas berbagai jenis opsi, misalnya opsi global , opsi server, dan sebagainya. Pertanyaan: Di mana file konfigurasi tmux default? juga merujuk pada beberapa jenis konfigurasi ini.

Beberapa jenis ini mudah dipahami: opsi jendela menangani hal-hal yang hanya berkaitan dengan satu jendela. Misalnya "boleh-ganti nama": windows punya nama, sesi tidak. Namun untuk tipe lain, perbedaannya tidak terlalu jelas.

Apa perbedaan antara

  • opsi server ( set-option -s),
  • opsi sesi global ( set-option -g),
  • opsi sesi ( set-option),
  • opsi jendela global ( set-window-option -g),
  • opsi jendela ( set-window-option)?

Juga, apa aturan pewarisan untuk jenis ini?

gioele
sumber

Jawaban:

30

Ada tiga kelas opsi yang berbeda: server, sesi, dan jendela. Kelas-kelas ini eksklusif: setiap opsi hanya milik salah satu kelas. Tidak pernah ada warisan antara kelas opsi.

Hanya ada satu tingkat opsi server, jadi tidak ada warisan di sana (meskipun Anda dapat memiliki beberapa server independen menggunakan bendera perintah -Latau -Sbaris perintah).

Opsi sesi dan jendela masing-masing menggunakan hierarki dua tingkat: opsi sesi global (jendela) memberikan nilai default untuk opsi sesi (jendela) yang tidak disetel. Semua opsi sesi dan jendela pada awalnya tidak disetel, sehingga sesi / jendela baru akan secara otomatis menggunakan nilai opsi sesi / jendela global.

Ketika opsi sesi diatur ( set-option), nilai yang baru ditetapkan akan menimpa nilai global untuk sesi itu. Untuk kembali menggunakan nilai global, hapus pilihan ( set-option -u). Perubahan pada nilai opsi sesi global akan mempengaruhi semua sesi di mana opsi itu saat ini tidak disetel. Ide yang sama berlaku untuk opsi jendela (kecuali pengaturan opsi jendela menimpa nilai untuk jendela individual, bukan sesi individu).


Misalnya, untuk menemukan nilai efektif untuk base-indexopsi sesi untuk sesi tertentu:

  • Periksa opsi sesi base-index(yaitu apa yang Anda dapatkan dari tmux -t «target-session» show-options base-index* ).
    1. Jika sesi memiliki base-indexnilai, maka gunakan.
    2. Jika nilai sesi tidak ditetapkan, maka gunakan nilai global (yaitu apa yang Anda dapatkan tmux show-options -g base-index).

Demikian pula, untuk menemukan nilai efektif untuk mode-keysopsi jendela untuk jendela tertentu:

  • Periksa opsi jendela mode-keys(yaitu apa yang Anda dapatkan dari tmux -t «target-window» show-options -w mode-keys** ).
    1. Jika jendela memiliki mode-keysnilai, maka gunakan.
    2. Jika nilai jendela tidak ditetapkan, maka gunakan nilai global (yaitu apa yang Anda dapatkan tmux show-options -gw mode-keys).

* Versi tmux yang lebih lama tidak menerima argumen nama opsi untuk show-options. Dengan versi mereka yang Anda akan harus melakukan sesuatu seperti grep untuk itu: tmux -t target show-options | grep '^base-index '.
** Ini sama dengan tmux show-window-options base-index, jika Anda suka itu lebih baik. Perintah terkait untuk opsi jendela global adalah tmux show-window-options -g base-index.


Berikut adalah diagram:

                 .---------------.
                ( 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
sumber
Untuk menghilangkan opsi server dari yang global: Opsi server adalah opsi yang tidak berlaku untuk opsi sesi atau jendela. Dan hanya ada beberapa opsi server yang dapat didaftar oleh show -s. Namun dari perspektif penggunaan, opsi server tidak perlu IMHO.
Bohr
1
Maksud saya, saya ingin opsi server juga dapat ditentukan -gdan dihapus -shanya demi kesederhanaan UX. Saya hanya tidak mendapat manfaat dengan mengetahui opsi adalah opsi server.
Bohr