tmux: tratando de enlazar la clave utf8


3

Estoy usando tmux 1.6 con konsole en Fedora 17 i686.

Tengo un teclado azerty (con caracteres acentuados) y quiero unir la tecla "ù".

Hice el siguiente ~ / .tmux.conf:

setw -g utf8 on
bind-key ù split-window -h

Pero, cuando ejecuto tmux tengo el siguiente error:

/home/glines/.tmux.conf: 2: unknown key: ù

¿Hay una manera de enlazar esta clave?

Para su ayuda, Gracias de antemano.

Respuestas:


6

Desafortunadamente, tmux solo admite valores de 8 bits individuales en sus enlaces de clave.

Si estaba utilizando una codificación de 8 bits (longitud fija) (por ejemplo, ISO 8859-1, ISO 8859-15, etc.), entonces el enlace debería haber funcionado. Si está utilizando UTF-8, sin embargo, su ù (U + 00F9) está codificado como dos bytes (C3 B9), y tmux lo rechaza como un nombre de clave desconocido (si una clave es más larga que un solo byte (después de eliminar sus prefijos modificadores), se procesa como el nombre de una clave especial, p. ej. F1, PageUp, KP0, etc.).


Sin embargo, si estás desesperado, hay un gran truco que puedes probar:

tmux bind-key -r $(printf '\303') display 'c3 prefix binding hack' \; \
     bind-key -r $(printf '\271') split-window -h

Esto abusa de la funcionalidad de enlace de "repetición" al usarla para permanecer en "modo de prefijo" mientras que básicamente ignora el primer byte de la codificación UTF-8 de ù (hex C3 B9, octal 303 271).

El primer byte de ù (octal 303) está vinculado a un comando ficticio, y el segundo byte (octal 271) está vinculado al comando de destino. Esto requiere que no debe haber configurado el tmux repeat-time opción a cero (para deshabilitar la repetición), y tiene un efecto secundario de dejar tmux en su modo de repetición para repeat-time milisegundos (por defecto a 500 ms) después de haber escrito Prefijo ù (este efecto secundario generalmente solo se notará si escribe inmediatamente una tecla de flecha (con o sin Controlar o Meta ) después Prefijo ù —Estas claves son los únicos enlaces predeterminados que son “repetibles”).

El ejemplo anterior utiliza el printf comando de shell para generar los bytes requeridos, pero esto no funcionará en su .tmux.conf. Si estuvieras corriendo tmux 1.7, podrías escribirlo así (en tu .tmux.conf ):

bind-key -r 0xC3 display 'c3 prefix binding hack'
bind-key -r 0xB9 split-window -h

Sin embargo, esta sintaxis de clave hexadecimal no funciona en tmux 1.6. Por lo tanto, debe organizar los bytes en bruto para que estén directamente en el archivo (su editor de texto puede pelear con usted por esto, y es fácil cometer un error), o usar una shell para ayudarlo:

run-shell "tmux bind-key -r $(printf '\\303') display 'c3 prefix binding hack' \\; bind-key -r $(printf '\\271') split-window -h"

Nota: run-shell ejecuta su comando de forma asíncrona, por lo que es posible que los enlaces no estén disponibles inmediatamente después de que comience su primera sesión.


Gracias por su respuesta, la parte de shell de ejecución no funciona pero actualizaré tmux pronto.
GlinesMome

El problema con el run-shell El comando puede haber sido el que utilicé ~/bin/tmux en lugar de simple tmux (He editado la respuesta; también desenterré un binario 1.6 y verifiqué que funcionaba con él en una instancia de servidor separada).
Chris Johnsen

Entonces, ¿cuál es la sintaxis si quiero enlazar split-window -h en & lt; kbd & gt; Prefijo & lt; / kbd & gt ;, & lt; kbd & gt; Control & lt; / kbd & gt; + & lt; kbd & gt; ù & lt; / kbd & gt ;?
fauve

1

Desde tmux 2.3 la reconexión dinámica, como lo explica Chris Johnsen, ya no es necesaria y ni siquiera funciona. Para enlazar cualquier carácter UTF-8 solo usa su valor Unicode en 0x notación.

Ejemplo

Digamos que quieres atar Prefijo mi (E pequeña con caron) a la ventana 2.

Primero necesitas averiguar el valor Unicode de ě (Tenga en cuenta que esto es diferente de la secuencia de códigos UTF-8).

Puede utilizar por ejemplo python3 para convertir el carácter UTF-8 a su valor Unicode:

$ python3
>>> hex(ord('ě'))
'0x11b'

Ahora cuando sabes un valor de Unicode ě es 0x011B simplemente agregue esta línea a su archivo de configuración tmux:

bind-key 0x011B select-window -t 2
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.