core-lib: refactor map! (and disable it when noninteractive)

This commit is contained in:
Henrik Lissner 2017-01-28 02:05:05 -05:00
parent fb53c8fda7
commit 02fef2fded

View file

@ -160,12 +160,10 @@ Example
local key def states forms)
(while rest
(setq key (pop rest))
(push
(reverse
(cond
;; it's a sub expr
((listp key)
`(,(macroexpand `(map! ,@key))))
(push (macroexpand `(map! ,@key)) forms))
;; it's a flag
((keywordp key)
@ -175,10 +173,10 @@ Example
(push doom-evil-localleader rest)))
(setq key :prefix))
(pcase key
(:prefix (setq prefix (concat prefix (kbd (pop rest)))) nil)
(:map (setq keymaps (-list (pop rest))) nil)
(:map* (setq defer t keymaps (-list (pop rest))) nil)
(:unset `(,(macroexpand `(map! ,(kbd (pop rest)) nil))))
(:prefix (setq prefix (concat prefix (kbd (pop rest)))))
(:map (setq keymaps (-list (pop rest))))
(:map* (setq defer t keymaps (-list (pop rest))))
(:unset `(,(macroexpand `(map! ,(kbd (pop rest))))))
(:after (prog1 `((after! ,(pop rest) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
(:when (prog1 `((if ,(pop rest) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
(:unless (prog1 `((if (not ,(pop rest)) ,(macroexpand `(map! ,@rest)))) (setq rest '())))
@ -196,8 +194,7 @@ Example
(cond ((= (length states) 1)
(user-error "local keybinding for %s must accompany another state" key))
((> (length keymaps) 0)
(user-error "local keybinding for %s cannot accompany a keymap" key))))
nil)))
(user-error "local keybinding for %s cannot accompany a keymap" key)))))))
;; It's a key-def pair
((or (stringp key)
@ -211,33 +208,36 @@ Example
(unless (> (length rest) 0)
(user-error "Map has no definition for %s" key))
(setq def (pop rest))
(let (out-forms)
(push
(cond ((and keymaps states)
(mapc (lambda (keymap)
(push `(,(if defer 'evil-define-key 'evil-define-key*)
',states ,keymap ,key ,def)
out-forms))
keymaps))
(macroexp-progn
(mapcar (lambda (keymap)
`(,(if defer 'evil-define-key 'evil-define-key*)
',states ,keymap ,key ,def))
keymaps)))
(keymaps
(mapc (lambda (keymap) (push `(define-key ,keymap ,key ,def) out-forms))
keymaps))
(macroexp-progn
(mapcar (lambda (keymap)
`(define-key ,keymap ,key ,def))
keymaps)))
(states
(mapc (lambda (state)
(push `(define-key
(macroexp-progn
(mapcar (lambda (state)
`(define-key
(evil-state-property ',state ,(if local :local-keymap :keymap) t)
,key ,def)
out-forms))
states))
(t (push `(,(if local 'local-set-key 'global-set-key)
,key ,def)
out-forms)))
,key ,def))
states)))
(t `(,(if local 'local-set-key 'global-set-key)
,key ,def)))
forms)
(setq states '()
local nil)
out-forms))
local nil))
(t (user-error "Invalid key %s" key))))
forms))
`(progn ,@(apply #'nconc (delete nil (delete (list nil) (reverse forms)))))))
(macroexp-progn (reverse forms))))
(when noninteractive
(defmacro map! (&rest rest)))
(provide 'core-lib)
;;; core-lib.el ends here