@@ -170,23 +170,6 @@ be activated.")
170170 (put map-sym (pop properties)
171171 (when properties (pop properties)))))
172172
173- (defun bind-map-evil-local-mode-hook ()
174- " Called to activate local state maps in a buffer."
175- ; ; format is (OVERRIDE-MODE STATE KEY DEF)
176- (dolist (entry bind-map-evil-local-bindings)
177- (let* ((map (intern (format " evil-%s -state-local-map " (nth 1 entry))))
178- (mode (nth 0 entry))
179- (global-mode (intern (format " global-%s " (nth 0 entry))))
180- (set-explicitly (intern (format " %s -set-explicitly" mode))))
181- (when (and (boundp global-mode) (boundp mode)
182- (boundp set-explicitly) (boundp map)
183- (keymapp (symbol-value map))
184- (symbol-value global-mode)
185- (not (and (symbol-value set-explicitly)
186- (null (symbol-value mode)))))
187- (define-key (symbol-value map) (nth 2 entry) (nth 3 entry))))))
188- (add-hook 'evil-local-mode-hook 'bind-map-evil-local-mode-hook )
189-
190173(defvar bind-map-major-modes-alist '()
191174 " Each element takes the form (MAP-ACTIVE (MAJOR-MODE1
192175MAJOR-MODE2 ...)). The car is the variable used to activate a map
@@ -395,7 +378,13 @@ mode maps. Set up by bind-map.el." map))
395378 , override-mode-doc )
396379 (, global-override-mode 1 ))
397380 (add-to-list 'emulation-mode-map-alists
398- (list (cons ', override-mode , root-map )))))
381+ (list (cons ', override-mode , root-map )))
382+ ; ; Ensure Evil includes this map by also adding to minor-mode maps
383+ (add-to-list 'minor-mode-map-alist (cons ', override-mode , root-map ))
384+ ; ; Normalize Evil keymaps when the override mode toggles
385+ (with-eval-after-load 'evil
386+ (add-hook ',(intern (format " %s -hook" override-mode))
387+ #'evil-normalize-keymaps ))))
399388
400389 (if (or minor-modes major-modes)
401390 ; ; only bind keys in root-map
@@ -409,28 +398,38 @@ mode maps. Set up by bind-map.el." map))
409398
410399 (when evil-keys
411400 (if (or minor-modes major-modes)
412- `((eval-after-load 'evil
413- '(progn
414- (dolist (key (bind-map-kbd-keys (list ,@evil-keys )))
415- (dolist (state ', evil-states )
416- (when ', major-modes
417- (define-key
418- (evil-get-auxiliary-keymap , root-map state t )
419- key ', prefix-cmd ))
420- (dolist (mode ', minor-modes )
421- (when (fboundp 'evil-define-minor-mode-key )
422- (evil-define-minor-mode-key
423- state mode key ', prefix-cmd )))))
424- (evil-normalize-keymaps))))
425- `((eval-after-load 'evil
426- '(progn
427- (dolist (key (bind-map-kbd-keys (list ,@evil-keys )))
428- (dolist (state ', evil-states )
429- (when , override-minor-modes
430- (push (list ', override-mode state key ', prefix-cmd )
431- bind-map-evil-local-bindings))
432- (evil-global-set-key state key ', prefix-cmd )))
433- (evil-normalize-keymaps))))))
401+ `((eval-after-load 'evil
402+ '(progn
403+ ; ; Bind per-state leaders in the auxiliary keymaps of root-map
404+ (dolist (key (bind-map-kbd-keys (list ,@evil-keys )))
405+ (dolist (state ', evil-states )
406+ (when ', major-modes
407+ (define-key (evil-get-auxiliary-keymap , root-map state t )
408+ key ', prefix-cmd ))
409+ (dolist (mode ', minor-modes )
410+ (when (fboundp 'evil-define-minor-mode-key )
411+ (evil-define-minor-mode-key ', evil-states mode key ', prefix-cmd )))))
412+ (evil-normalize-keymaps))))
413+ `((eval-after-load 'evil
414+ '(progn
415+ (dolist (state ', evil-states )
416+ ; ; Mark the root-map overriding for precedence
417+ (evil-make-overriding-map , root-map state)
418+ ; ; Bind keys in the per-state auxiliary keymaps
419+ (dolist (key (bind-map-kbd-keys (list ,@evil-keys )))
420+ (define-key (evil-get-auxiliary-keymap , root-map state t )
421+ key ', prefix-cmd )))
422+ ; ; Also associate bindings with the override minor mode so they
423+ ; ; are scoped to buffers where it is enabled
424+ (when , override-minor-modes
425+ (dolist (key (bind-map-kbd-keys (list ,@evil-keys )))
426+ (evil-define-minor-mode-key ', evil-states ', override-mode key ', prefix-cmd )))
427+ ; ; Fall back to global bindings when not overriding minor modes
428+ (unless , override-minor-modes
429+ (dolist (key (bind-map-kbd-keys (list ,@evil-keys )))
430+ (dolist (state ', evil-states )
431+ (evil-global-set-key state key ', prefix-cmd ))))
432+ (evil-normalize-keymaps))))))
434433
435434 (when bindings
436435 `((bind-map-set-keys , map
0 commit comments