commands - emacs ubuntu
Buffer-localmente anulando enlaces de teclas de modo menor en Emacs (3)
Es un poco engorroso de hacer. Puedes hacer algo como:
(add-hook ''<major-mode>-hook
(lambda ()
(let ((oldmap (cdr (assoc ''<minor-mode> minor-mode-map-alist)))
(newmap (make-sparse-keymap)))
(set-keymap-parent newmap oldmap)
(define-key newmap [<thekeyIwanttohide>] nil)
(make-local-variable ''minor-mode-overriding-map-alist)
(push `(<minor-mode> . ,newmap) minor-mode-overriding-map-alist))))
Quiero usar un modo menor que vuelva a enlazar una tecla de modo principal que definitivamente quiero mantener. ¿Cómo puedo volver a vincular la clave sin eliminarla del mapa en modo menor globalmente? Sé que puedo usar define-key
para eso, pero me gustaría mantener el enlace para otros buffers / modos principales.
¿Alguien puede ayudar?
Aquí hay una función para manejar todos los bits engorrosos.
(defun local-set-minor-mode-key (mode key def)
"Overrides a minor mode keybinding for the local
buffer, by creating or altering keymaps stored in buffer-local
`minor-mode-overriding-map-alist''."
(let* ((oldmap (cdr (assoc mode minor-mode-map-alist)))
(newmap (or (cdr (assoc mode minor-mode-overriding-map-alist))
(let ((map (make-sparse-keymap)))
(set-keymap-parent map oldmap)
(push `(,mode . ,map) minor-mode-overriding-map-alist)
map))))
(define-key newmap key def)))
A partir de entonces, puedes hacer
(local-set-minor-mode-key ''<minor-mode> (kbd "key-to-hide") nil)
En mi caso, company-mode
estaba anulando las vinculaciones cider-repl-mode
para Mp
y Mn
cuando se mostraba el menú de finalización de la empresa. El company-active-map
teclas para el menú de finalizaciones es company-active-map
, pero no hay un modo menor correspondiente ( company-mode
es para cuando el menú no está activo), por lo que no pude usar ninguna de las respuestas existentes.
Esto es lo que se me ocurrió en su lugar:
(add-hook ''cider-repl-mode-hook
(lambda ()
(make-local-variable ''company-active-map)
(setq company-active-map (copy-tree company-active-map))
(define-key company-active-map (kbd "M-p") nil)
(define-key company-active-map (kbd "M-n") nil)))