Rethink setting system
This commit is contained in:
parent
89c7ee0273
commit
093fa1b5a3
4 changed files with 75 additions and 67 deletions
|
@ -9,27 +9,31 @@
|
|||
"An alist of settings, mapping setting keywords to setter functions, which can
|
||||
be a lambda or symbol.")
|
||||
|
||||
(defmacro def-setting! (keyword arglist &optional docstring &rest body)
|
||||
(defun doom-def-setting (keyword setter-fn &optional docstring)
|
||||
"Define a setting macro. Takes the same arguments as `defmacro'. This should
|
||||
return forms, which will be run when `set!' is used to call this setting."
|
||||
(declare (indent defun))
|
||||
(unless (keywordp keyword)
|
||||
(error "Not a valid property name: %s" name))
|
||||
(let ((sym (intern (format "doom--set%s" keyword))))
|
||||
(setq doom-settings (assq-delete-all keyword doom-settings))
|
||||
`(push (cons ,keyword
|
||||
(defun ,sym ,arglist
|
||||
,docstring
|
||||
,@body))
|
||||
doom-settings)))
|
||||
(error "Not a valid property name: %s" keyword))
|
||||
(unless (or (symbolp setter-fn)
|
||||
(functionp setter-fn))
|
||||
(error "Not a valid setting function for %s" keyword))
|
||||
(push (list keyword
|
||||
:source load-file-name
|
||||
:docstring docstring
|
||||
:fn setter-fn)
|
||||
doom-settings))
|
||||
|
||||
(defmacro set! (keyword &rest rest)
|
||||
"Set an option defined by `doom-define-settings'. Skip if doesn't exist."
|
||||
"Set an option defined by `def-setting!'. Skip if doesn't exist."
|
||||
(declare (indent defun))
|
||||
(let ((set-fn (cdr (assq keyword doom-settings))))
|
||||
(when set-fn
|
||||
(let* ((plist (cdr (assq keyword doom-settings)))
|
||||
(fn (plist-get plist :fn)))
|
||||
(when (and doom-debug-mode (not fn))
|
||||
(message "No setting found for %s" keyword))
|
||||
(when fn
|
||||
(macroexp-progn
|
||||
(mapcar (lambda (&rest args) (apply set-fn args))
|
||||
(mapcar (lambda (args) `(apply #',fn ',(-list args)))
|
||||
rest)))))
|
||||
|
||||
(provide 'core-set)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue