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
|
@ -153,27 +153,6 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See
|
||||||
(defvar doom--defer nil)
|
(defvar doom--defer nil)
|
||||||
(defvar doom--local nil)
|
(defvar doom--local nil)
|
||||||
|
|
||||||
(defmacro define-key! (keymaps key def &rest rest)
|
|
||||||
"TODO"
|
|
||||||
(declare (indent defun))
|
|
||||||
(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)
|
(defmacro map! (&rest rest)
|
||||||
"A nightmare of a key-binding macro that will use `evil-define-key*',
|
"A nightmare of a key-binding macro that will use `evil-define-key*',
|
||||||
`define-key', `local-set-key' and `global-set-key' depending on context and
|
`define-key', `local-set-key' and `global-set-key' depending on context and
|
||||||
|
|
|
@ -387,5 +387,33 @@ For example:
|
||||||
(file-exists-p (or doom-core-dir \"~/.config\" \"some-file\") \"~\")"
|
(file-exists-p (or doom-core-dir \"~/.config\" \"some-file\") \"~\")"
|
||||||
(doom--resolve-path-forms spec directory))
|
(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)
|
(provide 'core-lib)
|
||||||
;;; core-lib.el ends here
|
;;; core-lib.el ends here
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue