[PATCH] Fix for issue #301

Max Mikhanosha max at openchat.com
Mon Jun 3 00:24:47 CEST 2013


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 <max at openchat.com>
> 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
> 



More information about the implementations-list mailing list