Cómo unir C- [de verdad (en serio esta vez de verdad)

11

¿Hay alguna forma de unirse C-[a algo y no tener todos los M-enlaces (Meta) en mal estado?

No es la primera vez que surge esta pregunta. Desafortunadamente, la única solución ofrecida en el hilo anterior es a) específica de Linux, b) requiere una herramienta externa (nuevamente específica de Linux) que no tiene nada que ver con Emacs. En la misma línea, podría haber usado algo como Karabiner en un OS X para robar la C-[secuencia antes de que Emacs la obtenga, pero esto es torpe y costoso.

Dado que se trata de Emacs que insiste en la traducción C-[a ESC, C-ia TABy probablemente otros me gustaría mucho como para romper estas relaciones y obtener secuencias de teclas preciosas espalda. Hace poco me encontré toda velocidad en este problema y la culpa a inocentes tranquila smartparens modo.

Una posible solución que involucró function-key-mapy key-translation-mapse discutió aquí, pero lamentablemente ya no funciona o no funcionó en primer lugar (o estoy haciendo algo mal). Sin embargo, creo que iba en la dirección correcta.

zeRusski
fuente
3
Emacs no insiste "en traducir C-[a ESC". Los dos son lo mismo . Del mismo modo, C-iy TABson nombres diferentes para el mismo código de control ASCII.
Drew
2
@Drew No es nada obvio que las combinaciones de teclas con control deben correlacionarse con los códigos de control ASCII (de los cuales solo hay 32) en una aplicación GUI. (O, diablos, incluso en xterm, que tiene un modo modifyOtherKeys para enviar secuencias de escape únicas en muchos casos, aunque no estoy seguro de esto en particular)
Random832
3
@ Random832: Tiene razón al distinguir las teclas de los caracteres . Es algo lógico y sencillo para un editor asignar la secuencia de teclas C-[ (presionar Ctrly golpear [) al personaje deC-[ control (también conocido como el personaje), pero no, eso no es obligatorio para alguien que diseña un editor. Y sí, Emacs hace eso. y son el mismo carácter, pero las teclas + y no necesitan asignarse a ningún carácter en particular. ESCC-[ESCCtrl[Esc
Drew

Respuestas:

8

Adaptado de mi propia configuración :

(define-key input-decode-map [?\C-\[] (kbd "<C-[>"))
(global-set-key (kbd "<C-[>") 'butterfly)

Obviamente, esto solo funcionará en la GUI.

editar: Tenga en cuenta que input-decode-mapes terminal local, lo que significa que modificarlo no funcionará si está usando emacsclient, pero lo hará si lo está usando emacs. He solucionado el problema en mi configuración envolviéndolo en un comando que opera en un marco y agregándolo al after-make-frame-functionsgancho.

wasamasa
fuente
gracias esto parece legítimo! Me pregunto si hay una manera de evitar que Emacs trate a Meta y ESC como la misma cosa. También me pregunto si estoy simplemente echar a perder algo de terminología de Emacs y no pensar directamente aquí
zeRusski
1
Esa es una pregunta diferente, por favor abra una nueva para eso.
wasamasa
curiosamente tener <C-i>y <C-[>volver a TABy ESCen el mapa global, como sugieres en tu configuración, bloquea mis Emacs cada vez que los golpeo:
zeRusski
1
Bueno, teniendo en cuenta que usted es el tipo que ha entregado un error por el bloqueo del timón al ingresar la letra "j" , culpo a su versión de Emacs por ser defectuosa y le sugiero que pruebe una diferente para OS X.
wasamasa
créeme, probé muchas compilaciones. Será otro misterio con el que tendré que vivir. Me las arreglaré -) gracias por la solución
zeRusski