Encuentro incluso Ctrl+b ser muy emacs
pero entiendo el punto. Me pregunto si podría vincularlo a una sola pulsación de tecla que no uso de otra manera. a saber Super_L (también conocida como la tecla izquierda de Windows. Por eso digo Super_L start xev
en una terminal y presiono esa tecla)
Super_L
es un keyym de X. Tmux se ejecuta en una terminal. Depende de su emulador de terminal transformar un keyym en una secuencia de caracteres. Por lo tanto, tendría que configurar tanto su emulador de terminal como tmux.
Mirando la documentación de tmux, el prefijo solo puede ser un nombre de clave conocido con un modificador opcional. Para que pueda establecer el prefijo tmux en una combinación de teclas que no usa, digamos M-F12
, y haz que tu terminal envíe la secuencia de caracteres para M-F12
cuando presiona Super_L
. Con un poco más de trabajo, podría usar una tecla que probablemente su teclado no tenga (tmux acepta F13
mediante F20
como nombres de clave, pero deben declararse en terminfo).
En el lado del emulador de terminal, tendrías que hacer arreglos para Super_L
para generar la secuencia de teclas \e\e[24~
(para M-F12
) o \e[34~
(para F20
) (dónde \e
es el carácter de escape). La forma de hacer esto depende del emulador de terminal (y algunos no son lo suficientemente configurables para hacerlo). Con xterm, se hace a través de recursos X:
! Make Super_L act as Meta+F12
XTerm.VT100.translations: #override \
<Key>Super_L: string("\033\033[24~")
Puede encontrar un inconveniente que Super_L
es normalmente un modificador, y las teclas modificadoras no siempre funcionan cuando se requiere un no modificador. Si no quieres Super_L
para ser un modificador, puede quitar su modificador o (de manera menos confusa) usar un símbolo de clave diferente para la clave física. Esto se puede hacer a través de xmodmap (anticuado y fácil de entender), a través de xkb (la forma moderna, pobremente documentada, poderosa y compleja), o quizás a través de la herramienta de configuración GUI de su entorno de escritorio.
No puedes. Vincular una clave llamará al cmd_bind_key_parse
función de cmd-bind-key.c
que a su vez (eventualmente) llamará a 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 }
Los tmux.c
contiene la tecla modificadora #define
declaraciones y de ese archivo tenemos:
106 /* Key modifier bits. */
107 #define KEYC_ESCAPE 0x2000
108 #define KEYC_CTRL 0x4000
109 #define KEYC_SHIFT 0x8000
110 #define KEYC_PREFIX 0x10000
Sin embargo, en la superficie, no parece demasiado difícil de modificar; tal vez un proyecto de fin de semana (famosas últimas palabras;))?
No he podido establecer un prefijo para una tecla modificadora personalizada, pero logré definir enlaces tmux en combinación con una tecla modificadora personalizada en Gnome en combinación con Metacity. Por ejemplo, para mapear Mod4
+k y Mod4
+j para moverse al panel actual hacia arriba y hacia abajo 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"
Esto permite los enlaces tmux en combinación con, por ejemplo, la tecla de Windows. Algo en esa línea funciona para cualquier administrador de ventanas que permita definir atajos de teclado globales (Compiz, KWin, etc.).