자체 마이너 모드와 키 맵을 정의하고 다른 모든 모드 (사소한 + 주요)를 대체 할 수 있습니다. 이것이 바로 내가 마이너 모드를 작성하기로 선택한 이유입니다.
키 바인딩이 모든 바인딩을 대체하는 단계 :
- 아래와 같이 마이너 모드 및 키 맵을 정의하십시오.
- 전 세계적으로 마이너 모드 활성화
(define-key my-mode-map (kbd "C-j") #'newline-and-indent)
마찬가지로 부 모드에서 설정된 다른 키 바인딩은 다른 모드의 키 바인딩보다 우선합니다.
마이너 모드 작성 방법에 대한 Christopher Wellons 의 블로그 게시물 을 읽는 것이 좋습니다 . 그 블로그와 nil
여러 주요 및 부 모드에서 다중 키 바인딩을 설정해야하는 번거 로움이 저의 마이너 모드를 작성하도록 영감을주었습니다.
이 접근 방식을 사용하는 가장 좋은 부분은 emacs의 기본 구성에서 키 바인딩이 수행하는 작업을 확인하려면 부 모드를 끄는 것입니다. 그런 다음 다시 켜고 사용자 정의 키 바인딩을 다시 얻습니다.
;; Main use is to have my key bindings have the highest priority
;; https://github.com/kaushalmodi/.emacs.d/blob/master/elisp/modi-mode.el
(defvar my-mode-map (make-sparse-keymap)
"Keymap for `my-mode'.")
;;;###autoload
(define-minor-mode my-mode
"A minor mode so that my key settings override annoying major modes."
;; If init-value is not set to t, this mode does not get enabled in
;; `fundamental-mode' buffers even after doing \"(global-my-mode 1)\".
;; More info: http://emacs.stackexchange.com/q/16693/115
:init-value t
:lighter " my-mode"
:keymap my-mode-map)
;;;###autoload
(define-globalized-minor-mode global-my-mode my-mode my-mode)
;; https://github.com/jwiegley/use-package/blob/master/bind-key.el
;; The keymaps in `emulation-mode-map-alists' take precedence over
;; `minor-mode-map-alist'
(add-to-list 'emulation-mode-map-alists `((my-mode . ,my-mode-map)))
;; Turn off the minor mode in the minibuffer
(defun turn-off-my-mode ()
"Turn off my-mode."
(my-mode -1))
(add-hook 'minibuffer-setup-hook #'turn-off-my-mode)
(provide 'my-mode)
;; Minor mode tutorial: http://nullprogram.com/blog/2013/02/06/