From 6bc236e8f3d2189c9b147ec7525bfead97d744fc Mon Sep 17 00:00:00 2001 From: kovan Date: Fri, 13 Feb 2026 15:56:55 +0100 Subject: [PATCH] fix(keybinds): ensure localleader sub-key is a prefix in leader map When `doom-localleader-key' is a sub-key of `doom-leader-key' (e.g. "S m" under "S"), intermediate minor-mode keymaps like evil-snipe can bind the leader key to a command, blocking Emacs' prefix key merging. Localleader bindings in mode aux keymaps become unreachable even though which-key displays them. Create a sparse keymap prefix for the sub-key in `doom-leader-map' so the lookup always succeeds through the leader path. Fix: #8562 Co-authored-by: Claude Opus 4.6 --- lisp/doom-keybinds.el | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lisp/doom-keybinds.el b/lisp/doom-keybinds.el index 1269bd54c..ad55fd778 100644 --- a/lisp/doom-keybinds.el +++ b/lisp/doom-keybinds.el @@ -230,6 +230,19 @@ localleader prefix." (define-key map (kbd doom-leader-alt-key) 'doom/leader)) (evil-define-key* doom-leader-key-states map (kbd doom-leader-key) 'doom/leader) (evil-define-key* doom-leader-alt-key-states map (kbd doom-leader-alt-key) 'doom/leader)) + ;; HACK: When `doom-localleader-key' is a sub-key of `doom-leader-key' + ;; (e.g. "S m" under "S"), intermediate minor-mode keymaps (like + ;; evil-snipe binding "S" to a command) can block Emacs' prefix key + ;; merging, preventing localleader bindings in mode aux keymaps from + ;; being reached. Ensure the sub-key is a prefix in `doom-leader-map' + ;; so the lookup always succeeds through the leader path. + (when (and doom-localleader-key doom-leader-key + (string-prefix-p (concat doom-leader-key " ") + doom-localleader-key)) + (let ((sub-key (substring doom-localleader-key + (1+ (length doom-leader-key))))) + (unless (lookup-key doom-leader-map (kbd sub-key)) + (define-key doom-leader-map (kbd sub-key) (make-sparse-keymap))))) (general-override-mode +1))))