From 796af69c28193f882e6b48038a52975b19ee3231 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 3 Jun 2018 23:52:21 +0200 Subject: [PATCH] Move define-key! macro to core-lib --- core/core-keybinds.el | 21 --------------------- core/core-lib.el | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/core/core-keybinds.el b/core/core-keybinds.el index 95c7d0881..6c02ab1f6 100644 --- a/core/core-keybinds.el +++ b/core/core-keybinds.el @@ -153,27 +153,6 @@ For example, :nvi will map to (list 'normal 'visual 'insert). See (defvar doom--defer 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) "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 diff --git a/core/core-lib.el b/core/core-lib.el index 020f9fb12..30a2f07fd 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -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