define-key versus evil-define-key

Gordon Gustafson gordon3.14 at gmail.com
Thu Sep 18 20:29:53 CEST 2014


Most importantly, your first example binds "\C-b" in the CURRENT
BUFFER for ALL MODES, while your second example binds "\C-b" for ALL
BUFFERS in ONLY THE SPECIFIED MODE (sorry for the caps, don't mean to
yell :P).

There are two other minor differences. First, evil-define-key stores
keymaps in evil's auxiliary maps. From evil-core.el:

;; ... any Emacs mode may be assigned state bindings of its
;; own by passing the mode's keymap to the function `evil-define-key'.
;; These mode-specific bindings are ultimately stored in so-called
;; auxiliary keymaps, which are sandwiched between the local keymap
;; and the global keymap.

This probably means that the different methods bind with different
precedence, though I'm not going to delve into the cases where this
actually matters. Second, evil-define-key can define keys in maps that
haven't been defined yet (it sets up a hook to add them to the map
once it is defined).


On 9/17/14, Nikolai Weibull <now at disu.se> wrote:
> Hi!
>
> What's the preferred way of adding keys to a given mode's map?
>
> Is
>
> (define-key evil-motion-state-local-map "\C-b"
> 'calendar-scroll-right-three-months)
>
> or
>
> (evil-define-key 'motion calendar-mode-map "\C-b"
> 'calendar-scroll-right-three-months)
>
> preferable?
>
> (From an ease-of-use perspective, the second is better, as it allows
> you to easily map more keys, but I'm wondering from a "the right way
> to do it" perspective.)
>
> _______________________________________________
> implementations-list mailing list
> implementations-list at lists.ourproject.org
> https://lists.ourproject.org/cgi-bin/mailman/listinfo/implementations-list
>



More information about the implementations-list mailing list