Cómo eliminar enlaces a la tecla de prefijo ESC


9

Me gustaría usar la ESCclave en lugar de C-gpara keyboard-quit. Mi enfoque ingenuo para hacer

(define-key global-map (kbd "ESC") 'keyboard-quit)

No funciona. ESCsigue siendo una tecla de prefijo y presionarla no llama keyboard-quit.


1
Puede interesarle este hilo relacionado: utilicé esa solución durante aproximadamente un año hasta que me acostumbré a Cg y ESC-ESC-ESC: Cómo usar <escape> (condicionalmente) como una tecla modificadora stackoverflow.com/a/20036348/ 2112489 La respuesta de Stefan en ese hilo relacionado es el mismo concepto que el usado universal-argumentcon universal-argument-map.
abogados

Respuestas:


8

Puedes hacer (define-key key-translation-map (kbd "ESC") (kbd "C-g")). Hice lo mismo hace mucho tiempo y no tuve problemas.

Edite para mejorar la respuesta de acuerdo con los comentarios:

Si desea mantener la ESCfuncionalidad clave, puede hacer

(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))

Una cosa a tener en cuenta es que si Emacs se cuelga, todavía tiene que usar la C-gtecla por alguna razón, pero eso ocurre raramente.


1
@EmacsUser ¿Incluso si nunca presiono ESC mientras uso emacs?
Geier

1
@EmacsUser: ¿Entonces? A partir de ahora, nunca presiono ESC una vez, y mucho menos dos o tres veces. No me lo voy a perder.
Geier

2
@EmacsUser No estoy diciendo que esta sea la respuesta correcta y que quiero usarla, solo quiero entender qué tiene de malo. Todo "en el futuro, no podrás presionar ESC dos veces" no me afecta en absoluto. Si me dices en qué condiciones podría entrar en un bucle infinito con esto y por qué, eso sería realmente perspicaz.
Geier

1
@Geier Utilicé esta reasignación durante mucho tiempo y nunca he tenido ningún problema. Lo único es que si emacs se cuelga, debe presionar C-gpara desanclarlo, la ESCreasignación no funciona en este caso.
clemera

1
@EmacsUser Nunca tuve un caso de uso, ESCasí que esto no me molestó. Pero si lo necesita, puede hacer otra traducción, por ejemplo(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
clemera

8

Mi consejo sería dejarlo ESCsolo, porque es una clave especial.

Por defecto, Emacs usa ESC(ASCII 27) como meta-prefix-key. Del manual de Elisp:

'esc-map' es el mapa de teclas global para la clave de prefijo. Por lo tanto, las definiciones globales de todos los metacaracteres se encuentran aquí. Este mapa también es la definición de la función de 'ESC-prefix'.

y

En cambio, los metacaracteres se consideran para la búsqueda de claves como secuencias de dos caracteres, el primero de los cuales es ESC (o lo que sea actualmente el valor de 'meta-prefix-char'). Por lo tanto, la clave 'M-a' se representa internamente como 'ESC a', y su enlace global se encuentra en la ranura para 'a' en 'esc-map'.

Por lo tanto, para usar ESC para otra cosa, deberá establecer meta-pefix-keyotra cosa y también vincular alguna otra clave ESC-prefix. Es posible que también se requieran otros cambios, nunca lo he intentado.

Para obtener más información meta-prefix-char, consulte Funciones para la búsqueda de claves en el manual de Elisp.


1
+1. No , no retire la unión de ESC. Ate otra clave a keyboard-quit, si lo desea. Y tenga en cuenta que ESC ESC ESCya le ofrece el comportamiento de escape que desea: consulte el manual de Emacs, Nodo Saliendo .
Dibujó

2
Ajuste de la meta-prefix-charque nilen OSX no desactivarlo de ser una tecla prefijo - sólo separarla de la tecla meta. En OSX con una versión gráfica de Emacs, me gusta separar la clave de escape de la metaclave: configuré (setq meta-prefix-char nil)al comienzo de mi inicialización para que todas las bibliotecas cargadas posteriormente entiendan que eso es lo que quiero. Esto me da la posibilidad de usar la meta clave como prefijo y la tecla de escape como prefijo. El esc-mapse define en el nivel de código fuente C dentro keymap.c. Está destinado a ser utilizado como una clave de prefijo.
ley

@lawlist Interesante: ¿entonces mapea meta para ser el esc-mapprefijo para preservar los enlaces M predeterminados?
glucas

Creo que esta es la configuración relevante en OSX: (setq ns-alternate-modifier 'meta)que hace que meta sea la tecla alt izquierda en el teclado de Apple. Me gusta usar la tecla alt derecha para crear caracteres unicode usando la configuración predeterminada de OSX: (setq ns-right-alternate-modifier 'none)- para insertar caracteres españoles, símbolos de párrafo, etc. Al construir --with-ns, las teclas alt izquierda y derecha están configuradas en meta. La configuración predeterminada vincula la tecla de escape a la meta clave en OSX usando meta-prefix-char, que es 27como usted indicó.
leyes

55
Usa emacs, dicen. Es extensible, dicen. No tienes que adaptarte a eso, se ajusta a ti, dicen. Es decir, solo se ajusta a usted si desea escapar de una situación presionando ESC tres veces. Debido a que alguien en el pasado pensó que ESC es una tecla tan inaudita (solo está en la esquina superior izquierda de cada teclado) que es mejor vincularla con la tecla Meta :-(.
Geier

1

Encantadora respuesta aquí: https://superuser.com/a/945245/624661

Citando:

Puede usar esto en su archivo de inicio de Emacs:

;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)

0

Desea vincular [escape], no (kbd "ESC"), como muestran los enlaces a los que hace referencia Ole . En stock, esto funcionará solo si emacs se enmarca en un sistema de ventanas. Creo que esto vale un poco de explicación.

(kdb "ESC")significa en realidad el carácter de control ASCII ESC, y como se menciona en glucas , ciertamente no quieres reasignar este. Pero Escno es ASCII ESC: es símbolo escape, al menos en un entorno gráfico. ¿Cómo ocurre que la unión (kbd "ESC")afecta Escentonces? Esto sucede porque Emacs traduce escapea ESC si no hay disponibles para la uniónescape . Una especie de respaldo si lo desea (que se implementa por medio de local-function-key-mapsi está interesado en tales cosas).

Por lo tanto, cuando se une [escape], está a salvo y no tiene que preocuparse ESC; aparte de sus propios enlaces, solo tiene que aumentar los mapas de teclas que dicen ESCcuándo quieren decir [escape].

Hmm ... bueno, casi. ¿Por qué estos mapas no se usan [escape]por primera vez? Porque esto no funcionará en una terminal. Si desea su Esctrabajo en un dispositivo de este tipo, tendrá que, como mínimo, personalizar su terminal antes.

La historia de la terminal se informa en otra publicación: ¿Cómo vincular C- [de verdad? . Lo que tiene que hacer es decirle al terminal que envíe una secuencia personalizada cuando Escse presiona, luego asigne esta secuencia a [escape]una etapa de entrada temprana en emacs (the input-decode-map).

Espero que esto ayude.

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.