Move define-key! macro to core-lib
This commit is contained in:
parent
818cb27724
commit
796af69c28
2 changed files with 28 additions and 21 deletions
|
@ -387,5 +387,33 @@ For example:
|
|||
(file-exists-p (or doom-core-dir \"~/.config\" \"some-file\") \"~\")"
|
||||
(doom--resolve-path-forms spec directory))
|
||||
|
||||
(defmacro define-key! (keymaps key def &rest rest)
|
||||
"Like `define-key', but accepts a variable number of KEYMAPS and/or KEY+DEFs.
|
||||
|
||||
KEYMAPS can also be (or contain) 'global or 'local, to make this equivalent to
|
||||
using `global-set-key' and `local-set-key'.
|
||||
|
||||
KEY is a key string or vector. It is *not* piped through `kbd'."
|
||||
(declare (indent defun))
|
||||
(or (cl-evenp (length rest))
|
||||
(signal 'wrong-number-of-arguments (list 'evenp (length rest))))
|
||||
(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)))))
|
||||
|
||||
(provide 'core-lib)
|
||||
;;; core-lib.el ends here
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue