¿Cómo enlazo el prefijo tmux a un Super?

20

Incluso me parece Ctrl+bmuy emacsparecido, pero entiendo el punto. Me pregunto si podría vincularlo a una sola pulsación de tecla de una tecla que no uso de otra manera. a saber Super_L(también conocida como la tecla izquierda de Windows. por eso digo que Super_L comienza xeven una terminal y presiono esa tecla)

xenoterracida
fuente

Respuestas:

15

Super_Les un keyym X. Tmux se ejecuta en una terminal. Depende de su emulador de terminal transformar un keyym en una secuencia de caracteres. Entonces tendría que configurar tanto su emulador de terminal como tmux.

Mirando la documentación de tmux, el prefijo solo puede ser un nombre clave conocido con un modificador opcional. Por lo tanto, puede establecer el prefijo tmux en una combinación de teclas que no usa, por ejemplo M-F12, y hacer que su terminal envíe la secuencia de caracteres para M-F12cuando presiona Super_L. Con un poco más de trabajo, se puede usar una llave que su teclado no tiene probablemente (tmux acepta F13través F20como nombres clave, pero tienen que ser declarada en terminfo).

En el lado del emulador de terminal, tendría que organizar para Super_Lgenerar la secuencia de teclas \e\e[24~(para M-F12) o \e[34~(para F20) (donde \eestá el carácter de escape). Cómo hacerlo depende del emulador de terminal (y algunos no son lo suficientemente configurables como para hacerlo). Con xterm, se realiza 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 golpear un problema que Super_Lnormalmente es un modificador, y las teclas modificadoras no siempre funcionan cuando se requiere un no modificador. Si no desea Super_Lser un modificador, puede quitar su modificador o (de manera menos confusa) usar un keyym diferente para la clave física. Esto se puede hacer a través de xmodmap (anticuado y simple de entender), a través de xkb (la forma moderna, mal documentada, poderosa y compleja), o tal vez a través de la herramienta de configuración GUI de su entorno de escritorio.

Gilles 'SO- deja de ser malvado'
fuente
¿funcionaría esto solo en X entonces? p. ej., si colapsara mi sistema de forma remota sin reenviar X, no funcionaría.
xenoterracide
2
@xenoterracide: o no entiendo tu pregunta o no entiendes mi respuesta. Super_Les un keyym X, por lo que presumiblemente tiene un servidor X en algún lugar (si iniciara sesión desde Windows, supongo que llamaría a la tecla la tecla izquierda de Windows). Tmux se ejecuta en un terminal y lee su entrada como bytes, con las teclas de función traducidas en secuencias de escape. Un inicio de sesión remoto es transparente, ssh solo transmite los bytes que forman la secuencia de escape.
Gilles 'SO- deja de ser malvado'
1
Acabo de probar esto en una Mac y podría salvar a otros algún tiempo. Parece que iTerm2 no admite el envío de F13-F20. Ver code.google.com/p/iterm2/issues/detail?id=1630
balu
3

No puedes Al vincular una tecla, se llamará a la cmd_bind_key_parsefunción desde la cmd-bind-key.ccual (eventualmente) se llamará key_string_get_modifiersdesde 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     } 

El tmux.ccontiene la clave del modificador de #definedeclaraciones 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 

En la superficie, sin embargo, no parece demasiado difícil de modificar; tal vez un proyecto de fin de semana (últimas palabras famosas;))?

gvkv
fuente
3
te falta un paso aquí: tmux es un programa en modo texto, lee secuencias de teclas, no X keyyms. Entonces es realmente posible, configurando tanto el emulador de terminal como tmux correctamente.
Gilles 'SO- deja de ser malvado'
2

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 asignar Mod4+ ky Mod4+ jpara 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 enlaces tmux en combinación con, por ejemplo, la tecla de Windows. Algo así funciona para cualquier administrador de ventanas que permita definir atajos de teclado globales (Compiz, KWin, etc.).

Ton van den Heuvel
fuente