At Sun, 02 Jun 2013 18:07:06 -0400, In fact relying on symbol name parsing is not needed, I did not realize there's already `evil-mode-for-keymap' function, which could be used instead. Feel free to adjust my patch accordingly.
Max Mikhanosha wrote: > > > From e4b59630cf40106d9afaf3544094dc27e3a2e840 Mon Sep 17 00:00:00 2001 > From: Max Mikhanosha <[email protected]> > Date: Sun, 2 Jun 2013 18:03:27 -0400 > Subject: [PATCH] In (evil-define-key) is done for a minor mode, try to > arrange for `evil-normalize-keymaps' to be called when mode > is toggled > > --- > evil-core.el | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/evil-core.el b/evil-core.el > index 18e88d6..662cf0e 100644 > --- a/evil-core.el > +++ b/evil-core.el > @@ -866,6 +866,16 @@ (defun evil-overriding-keymap-state (map) > (t > state)))) > > +(defun evil-maybe-hook-minor-mode (keymap) > + "If KEYMAP belongs to a minor mode, add `evil-normalize-keymaps' to mode > hook" > + (when (and (symbolp keymap) > + (string-match "^\\(.+\\)-\\(?:map\\|keymap\\)$" > + (symbol-name keymap))) > + (let ((mode-symbol (intern (match-string 1 (symbol-name keymap))))) > + (when (memq mode-symbol minor-mode-list) > + (let ((hook-symbol (intern (format "%s-hook" mode-symbol)))) > + (add-hook hook-symbol 'evil-normalize-keymaps)))))) > + > (defmacro evil-define-key (state keymap key def &rest bindings) > "Create a STATE binding from KEY to DEF for KEYMAP. > STATE is one of `normal', `insert', `visual', `replace', > @@ -898,7 +908,8 @@ (defmacro evil-define-key (state keymap key def &rest > bindings) > (setq key (pop bindings) > def (pop bindings))) > ;; ensure the prompt string comes first > - (evil-set-keymap-prompt aux (keymap-prompt aux))) > + (evil-set-keymap-prompt aux (keymap-prompt aux)) > + (evil-maybe-hook-minor-mode ',keymap)) > 'after-load-functions t nil > (format "evil-define-key-in-%s" > ',(if (symbolp keymap) keymap 'keymap)))) > -- > 1.7.11.rc0.100.g5498c5f > _______________________________________________ implementations-list mailing list [email protected] https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
