Refactor def-setting!/set!; now evaluates its arguments on set!

This commit is contained in:
Henrik Lissner 2017-02-08 02:22:51 -05:00
parent 5d1013d317
commit f053980e85
6 changed files with 96 additions and 24 deletions

View file

@ -36,18 +36,23 @@
map)
"Active keymap in popup windows.")
(def-setting! :popup (&rest rule)
(def-setting! :popup (&rest rules)
"Prepend a new popup rule to `shackle-rules'."
(let ((pattern (car rule))
(plist (cdr rule)))
;; Align popups by default (error if this doesn't happen)
(unless (plist-member plist :align)
(plist-put plist :align t))
;; Select popups by default
(unless (or (plist-member plist :select)
(plist-member plist :noselect))
(plist-put plist :select t))
(push (cons pattern plist) shackle-rules)))
(if (not (-all-p 'listp rules))
`(cl-pushnew ',rules shackle-rules :key 'car :test 'equal)
(let (real-rules)
(dolist (rule rules)
(let ((pattern (car rule))
(plist (cdr rule)))
;; Align popups by default (error if this doesn't happen)
(unless (plist-member plist :align)
(plist-put plist :align t))
;; Select popups by default
(unless (or (plist-member plist :select)
(plist-member plist :noselect))
(plist-put plist :select t))
(push (cons pattern plist) real-rules)))
`(setq shackle-rules (append ',real-rules shackle-rules)))))
;;