Buffer-locally overriding minor-mode key bindings in Emacs

后端 未结 3 708
梦谈多话
梦谈多话 2020-12-15 18:48

I want to use a minor mode which rebinds a major-mode key that I definitely want to keep. How can I rebind the key without deleting it from the minor-mode map globally? I kn

3条回答
  •  渐次进展
    2020-12-15 19:39

    Here's a function to handle all the cumbersome bits.

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

    Thereafter you can do

    (local-set-minor-mode-key ' (kbd "key-to-hide") nil)
    

提交回复
热议问题