Bagaimana saya mengikat awalan tmux ke Super?

20

Saya merasa Ctrl+bsangat emacssuka tetapi saya mengerti maksudnya. Saya bertanya-tanya apakah saya bisa mengikatnya ke satu penekanan tombol kunci yang saya tidak gunakan bijaksana? yaitu Super_L(juga dikenal sebagai tombol windows kiri. mengapa saya mengatakan Super_L mulai xevdi terminal dan tekan tombol itu)

xenoterracide
sumber

Jawaban:

15

Super_Ladalah kunci-kunci X. Tmux berjalan di terminal. Terserah emulator terminal Anda untuk mengubah keysym menjadi urutan karakter. Jadi Anda harus mengkonfigurasi emulator terminal dan tmux.

Melihat dokumentasi tmux, awalan hanya dapat berupa nama kunci yang dikenal dengan pengubah opsional. Jadi, Anda dapat mengatur awalan tmux ke kombinasi tombol yang tidak Anda gunakan, katakan M-F12, dan minta terminal Anda untuk mengirim urutan karakter M-F12ketika Anda menekan Super_L. Dengan sedikit bekerja lebih, Anda bisa menggunakan kunci yang keyboard Anda mungkin tidak memiliki (tmux menerima F13melalui F20sebagai nama kunci, tetapi mereka harus dinyatakan di terminfo).

Di sisi emulator terminal, Anda harus mengatur untuk Super_Lmenghasilkan urutan kunci \e\e[24~(untuk M-F12) atau \e[34~(untuk F20) (di mana \ekarakter escape). Cara melakukan ini tergantung pada emulator terminal (dan beberapa tidak cukup dapat dikonfigurasi untuk melakukannya). Dengan xterm, ini dilakukan melalui sumber X:

! Make Super_L act as Meta+F12
XTerm.VT100.translations:       #override \
    <Key>Super_L:  string("\033\033[24~")

Anda dapat menekan hambatan yang Super_Lbiasanya merupakan pengubah, dan tombol pengubah tidak selalu berfungsi saat bukan pengubah diperlukan. Jika Anda tidak ingin Super_Lmenjadi pengubah, Anda dapat menghapus pengubahnya, atau (tidak membingungkan) menggunakan tombol yang berbeda untuk tombol fisik. Ini dapat dilakukan melalui xmodmap (kuno dan mudah dipahami), melalui xkb (cara modern, yang tidak didokumentasikan dengan baik, kuat dan kompleks), atau mungkin melalui alat konfigurasi GUI lingkungan desktop Anda.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
apakah ini hanya akan bekerja di X? misalnya jika saya masuk ke sistem saya dari jarak jauh tanpa penerusan X itu tidak akan berhasil.
xenoterracide
2
@ xenoterracide: entah saya tidak mengerti pertanyaan Anda atau Anda tidak mengerti jawaban saya. Super_Ladalah keysym X, jadi Anda mungkin memiliki server X di suatu tempat (jika Anda masuk dari Windows, saya kira Anda akan memanggil kunci tersebut sebagai tombol Windows kiri). Tmux berjalan di terminal, dan membaca inputnya sebagai byte, dengan tombol fungsi diterjemahkan ke dalam urutan escape. Login jarak jauh bersifat transparan, ssh hanya mentransmisikan byte yang membentuk urutan pelarian.
Gilles 'SO- stop being evil'
1
Baru saja mencoba ini di Mac dan saya mungkin menghemat waktu orang lain. Sepertinya iTerm2 tidak mendukung pengiriman F13-F20. Lihat code.google.com/p/iterm2/issues/detail?id=1630
balu
3

Kamu tidak bisa Mengikat tombol akan memanggil cmd_bind_key_parsefungsi dari cmd-bind-key.cmana pada gilirannya akan (pada akhirnya) panggilan key_string_get_modifiersdari key-string.c:

/* Find modifiers. */
105     int
106     key_string_get_modifiers(const char **string)
107     {
108         int modifiers;
109         
110         modifiers = 0;
111         while (((*string)[0] != '\0') && (*string)[1] == '-') {
112             switch ((*string)[0]) {
113                 case 'C':
114                 case 'c':
115                 modifiers |= KEYC_CTRL;
116                 break;
117                 case 'M':
118                 case 'm':
119                 modifiers |= KEYC_ESCAPE;
120                 break;
121                 case 'S':
122                 case 's':
123                 modifiers |= KEYC_SHIFT;
124                 break;
125             }
126             *string += 2;
127         }
128         return (modifiers);
129     } 

Ini tmux.cberisi #definedeklarasi kunci pengubah dan dari file itu kita memiliki:

106     /* Key modifier bits. */
107     #define KEYC_ESCAPE 0x2000
108     #define KEYC_CTRL 0x4000
109     #define KEYC_SHIFT 0x8000
110     #define KEYC_PREFIX 0x10000 

Namun di permukaan, tidak terlihat terlalu sulit untuk dimodifikasi; mungkin proyek akhir pekan (kata-kata terakhir yang terkenal;))?

gvkv
sumber
3
Anda melewatkan langkah di sini: tmux adalah program mode teks, ia membaca urutan kunci, bukan X keysyms. Jadi sebenarnya mungkin, dengan mengkonfigurasi baik terminal emulator dan tmux dengan benar.
Gilles 'SANGAT berhenti menjadi jahat'
2

Saya belum dapat menetapkan awalan ke kunci pengubah khusus, tetapi saya berhasil mendefinisikan binding tmux dalam kombinasi dengan kunci pengubah khusus di bawah Gnome dalam kombinasi dengan Metacity. Misalnya, untuk memetakan Mod4+ kdan Mod4+ juntuk pindah ke panel saat ini ke atas dan ke bawah masing-masing:

gconftool-2 --set /apps/metacity/keybinding_commands/command_1 --type string "tmux select-pane -D"
gconftool-2 --set /apps/metacity/keybinding_commands/command_2 --type string "tmux select-pane -U"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_1 --type string "<Mod4>j"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_2 --type string "<Mod4>k"

Ini memungkinkan untuk tmux binding dalam kombinasi dengan misalnya kunci Windows. Sesuatu di sepanjang garis itu berfungsi untuk semua pengelola jendela yang memungkinkan untuk menentukan pintasan keyboard global (Compiz, KWin, dll.).

Ton van den Heuvel
sumber