Add remember.el (WIP)
This commit is contained in:
parent
125a82251c
commit
caf8d7aa54
|
@ -0,0 +1,43 @@
|
|||
;; ABANDON ALL HOPE YE WHO ENTER HERE
|
||||
|
||||
(defmacro remember-set (&rest symbols)
|
||||
"Setup a closure remembering symbols to apply with
|
||||
`remember-reset'. The variables will be renamed using TEMPLATE.
|
||||
SYMBOLS is a plist: the properties are symbols or mode names, and
|
||||
their values what to set after `remember-setup'."
|
||||
(let* ((template (format "remember--%s-%%s" (gensym)))
|
||||
(reset-fn (intern (format template "reset" "fn")))
|
||||
(list (cl-loop for sym in symbols by #'cddr
|
||||
collect `(,(intern (format template sym))
|
||||
,sym)
|
||||
into let-list
|
||||
collect (let ((val (plist-get symbols sym)))
|
||||
(cond ((eq val 'enable)
|
||||
`(,sym +1))
|
||||
((eq val 'disable)
|
||||
`(,sym -1))
|
||||
(t `(setq-local ,sym ,val))))
|
||||
into fn-set-list
|
||||
collect (let ((val (plist-get symbols sym))
|
||||
(rem (intern (format template sym))))
|
||||
(cond ((memq val '(enable disable))
|
||||
`(,sym (if ,rem +1 -1)))
|
||||
(t `(setq-local ,sym ,rem))))
|
||||
into fn-reset-list
|
||||
finally return (list let-list
|
||||
fn-reset-list
|
||||
fn-set-list))))
|
||||
`(progn
|
||||
(defvar-local ,reset-fn nil
|
||||
"Function to recall values from `remember-set'.")
|
||||
(let ,(cl-first list)
|
||||
(setf (symbol-function ',reset-fn)
|
||||
(lambda ()
|
||||
,@(cl-second list))))
|
||||
,@(cl-third list)
|
||||
',reset-fn)))
|
||||
|
||||
;; test
|
||||
|
||||
(setq fn (remember-set display-fill-column-indicator-mode disable))
|
||||
(funcall fn)
|
Loading…
Reference in New Issue