Як я можу прив’язати префікс tmux до Super?


20

Я вважаю навіть Ctrl+bдуже emacsсхожим, але я розумію суть. Мені цікаво, чи можу я прив’язати його до одного натискання клавіші, якого я не використовую? а саме Super_L(також відомий як ліва клавіша Windows. тому, чому я кажу, що Super_L починається xevв терміналі і натискає цю клавішу)

Відповіді:


15

Super_Lє X-ключем. Tmux працює в терміналі. Вашим термінальним емулятором слід перетворити клавішу в послідовність символів. Таким чином, вам доведеться налаштувати емулятор терміналу і tmux.

Переглядаючи документацію tmux, префікс може бути лише відомим ім'ям ключа з додатковим модифікатором. Таким чином, ви можете встановити префікс tmux на комбінацію клавіш, яку ви не використовуєте, скажімо M-F12, і отримати термінал для надсилання послідовності символів M-F12при натисканні Super_L. Додавши трохи більше роботи, ви можете використовувати ключ, який, можливо, не має вашої клавіатури (tmux приймає F13через F20назви ключів, але вони повинні бути оголошені у terminfo).

З боку емулятора терміналу, вам доведеться домовитись для Super_Lгенерації послідовності ключів \e\e[24~(для M-F12) або \e[34~(для F20) (де \eсимвол втечі). Як це зробити, залежить від емулятора терміналу (а деякі не настроюються достатньо для цього). З xterm це робиться через ресурси X:

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

Ви можете потрапити на корч, який Super_Lзазвичай є модифікатором, і клавіші модифікаторів не завжди працюють, коли потрібен немодифікатор. Якщо ви не хочете Super_Lбути модифікатором, ви можете зняти його модифікатор або (менш заплутано) використовувати інший ключ для фізичного ключа. Це можна зробити за допомогою xmodmap (старомодний і простий для розуміння), через xkb (сучасний, погано задокументований, потужний і складний спосіб) або, можливо, через інструмент налаштування GUI вашого робочого середовища.


це працювало б лише в X тоді? Наприклад, якби я віддалявся в мою систему без переадресації X, вона не працюватиме.
ксенотерацид

2
@xenoterracide: або я не розумію вашого запитання, або ви не розумієте моєї відповіді. Super_Lє X-ключем, тому, імовірно, у вас десь є X-сервер (якщо ви входили з Windows, я вважаю, що ви б назвали ключ лівою клавішею Windows). Tmux працює в терміналі і зчитує його введення у вигляді байтів, з функціональними клавішами, переведеними в послідовності втечі. Віддалений логін прозорий, ssh просто передає байти, що складають послідовність втечі.
Жил 'ТАК - перестань бути злим'

1
Просто спробував це на Mac, і я можу заощадити інших деякий час. Схоже, iTerm2 не підтримує надсилання F13-F20. Дивіться code.google.com/p/iterm2/isissue/detail?id=1630
balu

3

Ви не можете. Прив'язка ключа буде викликати cmd_bind_key_parseфункцію з cmd-bind-key.cяких в свою чергу , буде ( в кінці кінців) виклик key_string_get_modifiersз 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     } 

tmux.cМістить ключовий Модифікатор #defineзаяви і з цього файлу ми маємо:

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

На поверхні, однак, це виглядає не надто важко, щоб змінити; можливо проект на вихідні (відомі останні слова;)) проект?


3
тут вам не вистачає кроку: tmux - це програма з текстовим режимом, вона читає ключові послідовності, а не X-ключі. Так це реально можливо, правильно налаштувавши і емулятор термінала, і tmux.
Жил 'ТАК - перестань бути злим'

2

Я не зміг встановити префікс для спеціального ключа модифікатора, але мені вдалося визначити прив’язки tmux у поєднанні з користувацьким ключем модифікатора під Gnome у поєднанні з Metacity. Наприклад, щоб зіставити Mod4+ kі Mod4+ jдля переміщення відповідно до поточної панелі відповідно:

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"

Це дозволяє прив'язувати tmux в поєднанні, наприклад, з клавішею Windows. Щось за цими лініями працює для будь-якого менеджера вікон, що дозволяє визначити глобальні комбінації клавіш (Compiz, KWin тощо).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.