Как я связываю tmux префикс с Супер?

Или можно дать некоторым командам супердержаву. Я говорю о специальных полномочиях, в которых команды выполняются с разрешением владельца.

Получите путь команды #which <command> и набор SUID или SGID для того пути.

P.S. - SUID и биты SGID должны быть даны с осторожностью. Они могут сделать Вашу систему небезопасной.

20
05.09.2010, 20:09
4 ответа

Super_L X keysym. Tmux работает в терминале. Это до Вашего эмулятора терминала для преобразования keysym в последовательность символов. Таким образом, необходимо было бы настроить и эмулятор терминала и tmux.

Смотря на tmux документацию, префикс может только известное ключевое имя с дополнительным модификатором. Таким образом, можно установить tmux префикс на сочетание клавиш, Вы не используете, говорите M-F12, и заставьте свой терминал отправлять последовательность символов за M-F12 когда Вы нажимаете Super_L. С немного большим количеством работы Вы могли использовать ключ, который, вероятно, не имеет Ваша клавиатура (tmux, принимает F13 через F20 как ключ называет, но они должны быть объявлены в terminfo).

На стороне эмулятора терминала необходимо было бы устроить Super_L генерировать сочетание клавиш \e\e[24~ (для M-F12) или \e[34~ (для F20) (где \e символ ESC). Как сделать, это зависит от эмулятора терминала (и некоторые не достаточно настраиваются, чтобы сделать это). С xterm это сделано через X ресурсов:

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

Можно наткнуться на препятствие это Super_L обычно модификатор, и модифицирующие клавиши не всегда работают, когда немодификатор требуется. Если Вы не хотите Super_L чтобы быть модификатором, можно устранить его модификатор или (менее смутно) использовать другой keysym для физического ключа. Это может быть сделано через xmodmap (старомодный и простой понять) через xkb (современный, плохо зарегистрированный, мощный и сложный путь), или возможно через инструмент конфигурирования GUI Вашей настольной среды.

15
27.01.2020, 19:44
  • 1
    это только работало бы в X затем? например, если бы я окружил в свою систему удаленно без X передач, то она не работала бы. –  xenoterracide 11.09.2010, 22:30
  • 2
    @xenoterracide: или я не понимаю Вашего вопроса, или Вы не понимаете мой ответ. Super_L X keysym, таким образом, у Вас, по-видимому, есть X-сервер где-нибудь (если бы Вы входили в систему из Windows, я предполагаю, что Вы назвали бы ключ левым ключом Windows). Tmux работает в терминале и чтениях его вход как байты, с функциональными клавишами, переведенными в escape-последовательности. Удаленный вход в систему прозрачен, ssh просто передает байты, которые составляют escape-последовательность. –  Gilles 'SO- stop being evil' 12.09.2010, 00:04
  • 3
    Просто попробованный это на Mac и я мог бы сэкономить другим некоторое время. Похож на iTerm2, не поддерживает отправку F13-F20. Посмотрите code.google.com/p/iterm2/issues/detail?id=1630 –  balu 12.01.2012, 15:01

Вы не можете. Привязка ключа будет звонить 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
27.01.2020, 19:44
  • 1
    ответа, Вы пропускаете шаг здесь: tmux является программой текстового режима, он читает сочетания клавиш, не X keysyms. Таким образом, это на самом деле возможно путем конфигурирования и эмулятора терминала и tmux правильно. –  Gilles 'SO- stop being evil' 07.09.2010, 00:15

Я не смог установить префикс на пользовательскую модифицирующую клавишу, но мне действительно удавалось определить tmux привязку в сочетании с пользовательской модифицирующей клавишей под Gnome в сочетании с Метагородом. Например, для отображения 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, и т.д.).

2
27.01.2020, 19:44

Кажется, что Вы хотите это: https://lists.gnu.org/archive/html/screen-users/2009-12/msg00144.html

-1
27.01.2020, 19:44
  • 1
    Можно ли добавить некоторую информацию к ответу помимо просто ссылки? Спасибо –  Michael Mrozek♦ 23.11.2011, 16:35

Теги

Похожие вопросы