Improve leader key initialization

And ensure leader key always has precedence.

Indirectly fixes #1234
This commit is contained in:
Henrik Lissner 2019-03-09 01:48:30 -05:00
parent e0ed8669af
commit 8e866bb37f
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -29,6 +29,8 @@ This needs to be changed from $DOOMDIR/init.el.")
(defvar doom-leader-map (make-sparse-keymap) (defvar doom-leader-map (make-sparse-keymap)
"An overriding keymap for <leader> keys.") "An overriding keymap for <leader> keys.")
(defvar doom--which-key-leader-regexp nil)
;; ;;
(defvar doom-escape-hook nil (defvar doom-escape-hook nil
@ -94,10 +96,19 @@ If any hook returns non-nil, all hooks after it are ignored.")
;; the user more changes to modify them. ;; the user more changes to modify them.
(defun doom|init-leader-keys () (defun doom|init-leader-keys ()
"Bind `doom-leader-key' and `doom-leader-alt-key'." "Bind `doom-leader-key' and `doom-leader-alt-key'."
(global-set-key (kbd doom-leader-alt-key) 'doom/leader) (let ((map general-override-mode-map))
(when (featurep 'evil) (if (not (featurep 'evil))
(evil-define-key* '(emacs insert) 'global (kbd doom-leader-alt-key) 'doom/leader) (define-key map (kbd doom-leader-alt-key) 'doom/leader)
(evil-define-key* '(normal visual motion) 'global (kbd doom-leader-key) 'doom/leader))) (evil-define-key* '(normal visual motion) map (kbd doom-leader-key) 'doom/leader)
(evil-define-key* '(emacs insert) map (kbd doom-leader-alt-key) 'doom/leader)))
(setq doom--which-key-leader-regexp
(concat "\\(?:"
(let ((where (where-is-internal 'doom/leader
(list (current-global-map)))))
(cond (where (mapconcat #'key-description where "\\|"))
((stringp doom-leader-alt-key) (regexp-quote doom-leader-alt-key))
((regexp-quote (key-description doom-leader-alt-key)))))
"\\)")))
(add-hook 'doom-after-init-modules-hook #'doom|init-leader-keys) (add-hook 'doom-after-init-modules-hook #'doom|init-leader-keys)
;; ...However, this approach (along with :wk-full-keys in `define-leader-key!') ;; ...However, this approach (along with :wk-full-keys in `define-leader-key!')
@ -129,7 +140,7 @@ If any hook returns non-nil, all hooks after it are ignored.")
"\\`" "\\`"
;; Modification begin ;; Modification begin
(if (memq 'doom-leader-map keymaps) (if (memq 'doom-leader-map keymaps)
(concat "\\`\\(?:" doom-leader-key "\\|" doom-leader-alt-key "\\) "))) (concat "\\`" doom--which-key-leader-regexp " ")))
;; Modification end ;; Modification end
(regexp-quote key) (regexp-quote key)
"\\'")) "\\'"))