key-bindings – ¿Cómo suprimir la combinación de teclas de un modo menor solo en ciertos modos principales?

Pregunta:

Supongamos que uso el modo menor MIN con un montón de modos principales. En uno de esos modos principales, llámelo MAJ1, la vinculación de MIN para una clave específica K no es deseable; Por lo tanto, me gustaría suprimir esa definición y hacer que Emacs recurra a la definición del modo principal, si corresponde, o al predeterminado en global-map. Sin embargo, no quiero cambiar la forma en que MIN maneja esa tecla cuando se usa con cualquier otro modo principal, y quiero preservar los otros efectos de MIN en MAJ1. ¿Cuál es la mejor manera de lograrlo?

La combinación específica que me preocupa es Typo minor mode + Markdown major mode (ambos se instalan como paquetes ELPA) y el carácter imprimible ` (ASCII backtick), que es sintácticamente significativo en Markdown. typo-mode define ' insertar ' (comillas simples a la izquierda) y luego reemplazarlo con una tilde si se presiona nuevamente. El 99% de las veces cuando escribo ` en un archivo de rebajas, quiero la comilla invertida ASCII, así que quiero deshacerme del enlace del modo de error tipográfico, pero solo cuando el modo principal es el modo de rebajas.

El modo de error tipográfico se activa desde text-mode-hook:

(add-hook 'text-mode-hook
          #'(lambda ()
              (auto-fill-mode 1)
              (typo-mode 1)))

El lugar obvio para colocar una anulación específica de markdown es markdown-mode-hook, así que lo intenté

(add-hook 'markdown-mode-hook
          #'(lambda ()
              (local-set-key (kbd "`") 'self-insert-command)))

pero eso parece no tener ningún efecto en absoluto; Supongo que el mapa de teclas del modo de error tipográfico solo se aplica después de que finaliza el gancho del modo de reducción.

Para complicar las cosas, el modo de rebajas tiene un comportamiento eléctrico opcional para ` , así que lo ideal sería hacer un agujero específico de rebajas en el mapa de teclas del modo tipográfico para permitir que la vinculación del mapa del modo de rebajas surta efecto para esta tecla, pero si no hay una buena manera de hacer eso, podría vivir con una solución que lo limite al auto-comando de inserción.

Respuesta:

No creo que haya una salida fácil para este. Podrías hacer algo como:

(add-hook 'typo-mode-hook
          (lambda ()
            (when (and typo-mode (derived-mode-p 'markdown-mode))
              (let ((map (make-sparse-keymap)))
                (set-keymap-parent map typo-mode-map)
                (define-key map (kbd "`") 'self-insert-command)
                (push `(typo-mode . ,map)
                      minor-mode-overriding-map-alist)))))

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım