Eu acho mesmo Ctrl+b ser muito emacs
gosto, mas eu entendo o ponto. Estou me perguntando se eu poderia vinculá-lo a um único pressionamento de tecla de uma tecla que não uso de outra forma. nomeadamente Super_L (também conhecida como tecla esquerda do Windows. Por isso digo Super_L start xev
em um terminal e pressiono essa tecla)
Super_L
é um X keysym. Tmux é executado em um terminal. Cabe ao emulador de terminal transformar um keysym em uma sequência de caracteres. Portanto, você teria que configurar o emulador de terminal e o tmux.
Olhando a documentação do tmux, o prefixo pode ser apenas um nome de chave conhecido com um modificador opcional. Portanto, você pode definir o prefixo tmux para uma combinação de teclas que você não usa, diga M-F12
, e faça com que seu terminal envie a sequência de caracteres para M-F12
quando você pressiona Super_L
. Com um pouco mais de trabalho, você poderia usar uma tecla que seu teclado provavelmente não possui (o tmux aceita F13
através F20
como nomes de chave, mas eles devem ser declarados em terminfo).
No lado do emulador de terminal, você teria que providenciar Super_L
para gerar a sequência de teclas \e\e[24~
(para M-F12
) ou \e[34~
(para F20
) (Onde \e
é o caractere de escape). Como fazer isso depende do emulador de terminal (e alguns não são configuráveis o suficiente para fazer isso). Com o xterm, isso é feito por meio de recursos X:
! Make Super_L act as Meta+F12
XTerm.VT100.translations: #override \
<Key>Super_L: string("\033\033[24~")
Você pode encontrar um obstáculo que Super_L
normalmente é um modificador, e as teclas modificadoras nem sempre funcionam quando um não modificador é necessário. Se você não quer Super_L
para ser um modificador, você pode retirar seu modificador ou (menos confuso) usar um símbolo de tecla diferente para a tecla física. Isso pode ser feito através do xmodmap (antigo e simples de entender), através do xkb (a forma moderna, mal documentada, poderosa e complexa) ou talvez através da ferramenta de configuração de GUI do seu ambiente de desktop.
Você não pode. Vincular uma tecla irá chamar o cmd_bind_key_parse
função de cmd-bind-key.c
que por sua vez irá (eventualmente) chamar key_string_get_modifiers
de 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 }
O tmux.c
contém a tecla modificadora #define
declarações e desse arquivo temos:
106 /* Key modifier bits. */
107 #define KEYC_ESCAPE 0x2000
108 #define KEYC_CTRL 0x4000
109 #define KEYC_SHIFT 0x8000
110 #define KEYC_PREFIX 0x10000
Na superfície, porém, não parece muito difícil de modificar; talvez um projeto de fim de semana (últimas palavras famosas;))?
Não fui capaz de definir um prefixo para uma tecla modificadora personalizada, mas consegui definir ligações tmux em combinação com uma tecla modificadora personalizada no Gnome em combinação com Metacity. Por exemplo, para mapear Mod4
+k e Mod4
+j para mover para o painel atual para cima e para baixo, respectivamente:
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"
Isso permite ligações tmux em combinação com, por exemplo, a tecla Windows. Algo nesse sentido funciona para qualquer gerenciador de janelas que permita definir atalhos de teclado globais (Compiz, KWin, etc.).