mirror of
https://github.com/doomemacs/doomemacs
synced 2025-08-01 12:17:25 -05:00
Minimize dependence on map!
This is in preparation for general.el integration coming in 2.1.1. It is very likely that map! will change (and even more, be split into several macros). Not much, but change none-the-less. Specifically, the state keywords (e.g. :nvi, :n, :i) will be removed in favor of a :state property that takes a list, e.g. (normal visual insert). In any case, both map! and general are also relatively expensive compared to define-key and evil-define-key* (and the new define-key! macro), so use that when we can. This also means changes to either API won't affect Doom's modules in the long term.
This commit is contained in:
@ -153,17 +153,26 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
|
||||
(defvar doom--defer nil)
|
||||
(defvar doom--local nil)
|
||||
|
||||
(defmacro define-key! (keymap key def &rest rest)
|
||||
(defmacro define-key! (keymaps key def &rest rest)
|
||||
"TODO"
|
||||
(declare (indent defun))
|
||||
`(progn
|
||||
(define-key ,keymap ,key ,def)
|
||||
,@(let (forms)
|
||||
(while rest
|
||||
(let ((key (pop rest))
|
||||
(def (pop rest)))
|
||||
(push `(define-key ,keymap ,key ,def) forms)))
|
||||
(nreverse forms))))
|
||||
(if (and (listp keymaps)
|
||||
(not (eq (car-safe keymaps) 'quote)))
|
||||
`(dolist (map (list ,@keymaps))
|
||||
,(macroexpand `(define-key! map ,key ,def ,@rest)))
|
||||
(when (eq (car-safe keymaps) 'quote)
|
||||
(pcase (cadr keymaps)
|
||||
(`global (setq keymaps '(current-global-map)))
|
||||
(`local (setq keymaps '(current-local-map)))
|
||||
(x (error "%s is not a valid keymap" x))))
|
||||
`(let ((map ,keymaps))
|
||||
(define-key map ,key ,def)
|
||||
,@(let (forms)
|
||||
(while rest
|
||||
(let ((key (pop rest))
|
||||
(def (pop rest)))
|
||||
(push `(define-key map ,key ,def) forms)))
|
||||
(nreverse forms)))))
|
||||
|
||||
(defmacro map! (&rest rest)
|
||||
"A nightmare of a key-binding macro that will use `evil-define-key*',
|
||||
|
Reference in New Issue
Block a user