Make def-setting! behave more like defmacro
set! used to aggressively evaluate its arguments (at expansion-time), even if placed inside an after! block. This causes unavoidable errors if those arguments use functions/variables that don't exist yet. Fixes #112
This commit is contained in:
parent
27cbd36b69
commit
928812da8a
12 changed files with 104 additions and 107 deletions
|
@ -3,19 +3,14 @@
|
|||
;; I'm a vimmer at heart. Its modal philosophy suits me better, and this module
|
||||
;; strives to make Emacs a much better vim than vim was.
|
||||
|
||||
(def-setting! :evil-state (&rest mode-state-list)
|
||||
(def-setting! :evil-state (modes state)
|
||||
"Set the initialize STATE of MODE using `evil-set-initial-state'."
|
||||
(if (cl-every #'listp mode-state-list)
|
||||
`(progn
|
||||
,@(let (forms)
|
||||
(dolist (it mode-state-list (nreverse forms))
|
||||
(unless (consp it)
|
||||
(error ":evil-state expected cons cells, got %s" it))
|
||||
(push `(evil-set-initial-state ',(car it) ',(cdr it)) forms))))
|
||||
(let ((argc (length mode-state-list)))
|
||||
(unless (= argc 2)
|
||||
(error ":evil-state expected 2 arguments, got %s" argc)))
|
||||
`(evil-set-initial-state ',(car mode-state-list) ',(cadr mode-state-list))))
|
||||
(let ((unquoted-modes (doom-unquote modes)))
|
||||
(if (listp unquoted-modes)
|
||||
`(progn
|
||||
,@(cl-loop for mode in unquoted-modes
|
||||
collect `(evil-set-initial-state ',mode ,state)))
|
||||
`(evil-set-initial-state ,modes ,state))))
|
||||
|
||||
|
||||
;;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue