mac commands comandos emacs

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)))