Add core-set, def-setting! and set!; standardized settings
This commit is contained in:
parent
dbfe1f9b48
commit
194490680a
2 changed files with 51 additions and 20 deletions
|
@ -21,12 +21,8 @@
|
||||||
(setq shackle-default-alignment 'below
|
(setq shackle-default-alignment 'below
|
||||||
shackle-select-reused-windows t)
|
shackle-select-reused-windows t)
|
||||||
|
|
||||||
(defmacro def-popup! (&rest rules)
|
(def-setting! :popup (rule)
|
||||||
"Define one or more popup rules. See `shackle-rules' for the format of these
|
"Prepend a new popup rule to `shackle-rules'."
|
||||||
rules. If :align is omitted, it will use `shackle-default-alignment'."
|
|
||||||
(declare (indent 0))
|
|
||||||
(macroexp-progn
|
|
||||||
(mapcar (lambda (rule)
|
|
||||||
;; Ensure some default attributes are set for window rules
|
;; Ensure some default attributes are set for window rules
|
||||||
(let ((pattern (car rule))
|
(let ((pattern (car rule))
|
||||||
(ruleset (cdr rule)))
|
(ruleset (cdr rule)))
|
||||||
|
@ -39,11 +35,10 @@ rules. If :align is omitted, it will use `shackle-default-alignment'."
|
||||||
(plist-put ruleset :select t))
|
(plist-put ruleset :select t))
|
||||||
(setq rule (append (list pattern) ruleset))
|
(setq rule (append (list pattern) ruleset))
|
||||||
`(push ',rule shackle-rules)))
|
`(push ',rule shackle-rules)))
|
||||||
rules)))
|
|
||||||
|
|
||||||
;; :noesc and :modeline are custom settings and are not part of shackle. See
|
;; :noesc and :modeline are custom settings and are not part of shackle. See
|
||||||
;; `doom*popup-init' and `doom-popup-buffer' for how they're used.
|
;; `doom*popup-init' and `doom-popup-buffer' for how they're used.
|
||||||
(def-popup!
|
(set! :popup
|
||||||
("^ ?\\*doom:.+\\*$" :size 35 :regexp t :modeline t)
|
("^ ?\\*doom:.+\\*$" :size 35 :regexp t :modeline t)
|
||||||
("^ ?\\*doom .+\\*$" :size 12 :noselect t :regexp t :modeline t)
|
("^ ?\\*doom .+\\*$" :size 12 :noselect t :regexp t :modeline t)
|
||||||
("^\\*.+-Profiler-Report .+\\*$" :size 0.3 :regexp t)
|
("^\\*.+-Profiler-Report .+\\*$" :size 0.3 :regexp t)
|
||||||
|
|
36
core/core-set.el
Normal file
36
core/core-set.el
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
;;; core-set.el
|
||||||
|
|
||||||
|
;; When we switch out feature modules, I don't want certain config segments to
|
||||||
|
;; casue errors. This gives a
|
||||||
|
|
||||||
|
(define-key help-map "\C-s" 'doom/describe-setting)
|
||||||
|
|
||||||
|
(defvar doom-settings nil
|
||||||
|
"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)
|
||||||
|
"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)))
|
||||||
|
|
||||||
|
(defmacro set! (keyword &rest rest)
|
||||||
|
"Set an option defined by `doom-define-settings'. Skip if doesn't exist."
|
||||||
|
(declare (indent defun))
|
||||||
|
(let ((set-fn (cdr (assq keyword doom-settings))))
|
||||||
|
(when set-fn
|
||||||
|
(macroexp-progn
|
||||||
|
(mapcar (lambda (&rest args) (apply set-fn args))
|
||||||
|
rest)))))
|
||||||
|
|
||||||
|
(provide 'core-set)
|
||||||
|
;;; core-set.el ends here
|
Loading…
Add table
Add a link
Reference in a new issue