From 93680af5c77811f6e58adda92ba7f0143c278be5 Mon Sep 17 00:00:00 2001 From: StrawberryTea Date: Sun, 6 Aug 2023 16:12:05 -0400 Subject: [PATCH] fix: make leader key descriptions in the keymap This commit moves leader key descriptions from `which-key-replacement-alist` to the keymap itself. This helps with performance because that way, which-key does not have to calculate every single leader key description for each keypress. Furthermore, this fixes issues like #1413 where relocating leader keymaps resulted in which-key not showing the correct leader key descriptions. I also made the leader prefix maps have their own prefix commands by populating the function slot of the keymap variables. This is an Emacs convention. I made `doom-leader-map` follow this convention as well. --- lisp/doom-keybinds.el | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lisp/doom-keybinds.el b/lisp/doom-keybinds.el index 29788e9a9..0125a18b7 100644 --- a/lisp/doom-keybinds.el +++ b/lisp/doom-keybinds.el @@ -145,11 +145,8 @@ all hooks after it are ignored.") forms)) (when-let (desc (cadr (memq :which-key udef))) (prependq! - wkforms `((which-key-add-key-based-replacements - (general--concat t doom-leader-alt-key ,key) - ,desc) - (which-key-add-key-based-replacements - (general--concat t doom-leader-key ,key) + wkforms `((which-key-add-keymap-based-replacements doom-leader-map + ,key ,desc)))))))) (macroexp-progn (append (and wkforms `((after! which-key ,@(nreverse wkforms)))) @@ -195,7 +192,7 @@ localleader prefix." ;; :prefix/:non-normal-prefix properties because general is incredibly slow ;; binding keys en mass with them in conjunction with :states -- an effective ;; doubling of Doom's startup time! -(define-prefix-command 'doom/leader 'doom-leader-map) +(define-prefix-command 'doom-leader-map) (define-key doom-leader-map [override-state] 'all) ;; Bind `doom-leader-key' and `doom-leader-alt-key' as late as possible to give @@ -210,9 +207,9 @@ localleader prefix." (set-keymap-parent doom-leader-map mode-specific-map)) ((equal doom-leader-alt-key "C-x") (set-keymap-parent doom-leader-map ctl-x-map))) - (define-key map (kbd doom-leader-alt-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)) + (define-key map (kbd doom-leader-alt-key) #'doom-leader-map)) + (evil-define-key* '(normal visual motion) map (kbd doom-leader-key) #'doom-leader-map) + (evil-define-key* '(emacs insert) map (kbd doom-leader-alt-key) #'doom-leader-map)) (general-override-mode +1)))) @@ -317,6 +314,8 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See :prefix prefix) rest)) (push `(defvar ,keymap (make-sparse-keymap)) + doom--map-forms) + (push `(define-prefix-command ',keymap) doom--map-forms)))) (:prefix (cl-destructuring-bind (prefix . desc)