Fix wrong which-key labels & leader key precedence

This changes how leader keys are bound, to fix an issue where the wrong
which-key label was assigned to the wrong keys, and cases where the
leader key was being shadowed by other minor mode mappings.

Unfortunately, this new method adds 10-20% to startup times. I'll
address this in a future patch. For now, correctness is more important.

Also fixes dashboard keybind detection.
This commit is contained in:
Henrik Lissner 2018-12-27 00:06:06 -05:00
parent 6992e27884
commit 63a224f0e8
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 18 additions and 19 deletions

View file

@ -55,21 +55,16 @@ If any hook returns non-nil, all hooks after it are ignored.")
;; leader/localleader keys
(define-prefix-command 'doom-leader 'doom-leader-map)
(define-key doom-leader-map [override-state] 'all)
(global-set-key (kbd doom-leader-alt-key) 'doom-leader)
(after! evil
(global-set-key (kbd doom-leader-alt-key) nil)
(general-define-key :states '(emacs insert) doom-leader-alt-key 'doom-leader)
(general-define-key :states '(normal visual motion replace) doom-leader-key 'doom-leader))
(defvar doom-leader-alist `((t . ,doom-leader-map)))
(add-to-list 'emulation-mode-map-alists 'doom-leader-alist)
;; We avoid `general-create-definer' to ensure that :states, :wk-full-keys and
;; :keymaps cannot be overwritten.
(defmacro define-leader-key! (&rest args)
`(general-define-key
:states nil
:wk-full-keys nil
:keymaps 'doom-leader-map
:prefix doom-leader-alt-key
,@args))
(general-create-definer define-localleader-key!
@ -80,6 +75,14 @@ If any hook returns non-nil, all hooks after it are ignored.")
;; Because :non-normal-prefix doesn't work for non-evil sessions (only evil's
;; emacs state), we must redefine `define-localleader-key!' once evil is loaded
(after! evil
(defmacro define-leader-key! (&rest args)
`(general-define-key
:states '(normal visual motion insert)
:keymaps 'doom-leader-map
:prefix doom-leader-key
:non-normal-prefix doom-leader-alt-key
,@args))
(general-create-definer define-localleader-key!
:states (cdr general-describe-evil-states)
:major-modes t

View file

@ -419,17 +419,13 @@ controlled by `+doom-dashboard-pwd-policy'."
'help-echo label)
(format "%-37s" (buffer-string)))
;; Lookup command keys dynamically
(or (let ((maps (list global-map)))
(when (bound-and-true-p evil-normal-state-map)
(push evil-motion-state-map maps)
(push evil-normal-state-map maps))
(when-let* ((key (where-is-internal action maps t)))
(or (when-let* ((key (where-is-internal action nil t)))
(propertize (with-temp-buffer
(save-excursion (insert (key-description key)))
(while (re-search-forward "<\\([^>]+\\)>" nil t)
(replace-match (upcase (substring (match-string 1) 0 3))))
(buffer-string))
'face 'font-lock-constant-face)))
'face 'font-lock-constant-face))
""))))
(if (display-graphic-p)
"\n\n"