summary refs log tree commit diff stats
path: root/lisp/remember.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/remember.el')
-rw-r--r--lisp/remember.el56
1 files changed, 0 insertions, 56 deletions
diff --git a/lisp/remember.el b/lisp/remember.el deleted file mode 100644 index a759419..0000000 --- a/lisp/remember.el +++ /dev/null
@@ -1,56 +0,0 @@
1;;; remember.el --- Remember variables and modes -*- lexical-binding: t; -*-
2
3;;; Code:
4
5(defmacro remember-remember (alist)
6 (let* ((template (format "remember--%s-%%s" (gensym)))
7 (reset-fn (intern (format template "recall")))
8 (things (cl-loop for (sym . newval) in alist
9 as rem = (intern (format template sym))
10
11 ;; Collect original values
12
13 )))))
14
15
16(defmacro remember-set (&rest symbols)
17 "Setup a closure remembering symbols to apply with
18`remember-reset'. The variables will be renamed using TEMPLATE.
19SYMBOLS is a plist: the properties are symbols or mode names, and
20their values what to set after `remember-setup'."
21 (let* ((template (format "remember--%s-%%s" (gensym)))
22 (reset-fn (intern (format template "reset")))
23 (list (cl-loop for sym in symbols by #'cddr
24 collect `(,(intern (format template sym))
25 ,sym)
26 into let-list
27 collect (let ((val (plist-get symbols sym)))
28 (cond ((eq val 'enable)
29 `(,sym +1))
30 ((eq val 'disable)
31 `(,sym -1))
32 (t `(setq-local ,sym ,val))))
33 into fn-set-list
34 collect (let ((val (plist-get symbols sym))
35 (rem (intern (format template sym))))
36 (cond ((memq val '(enable disable))
37 `(,sym (if ,rem +1 -1)))
38 (t `(setq-local ,sym ,rem))))
39 into fn-reset-list
40 finally return (list let-list
41 fn-reset-list
42 fn-set-list))))
43 `(progn
44 (defvar-local ,reset-fn nil
45 "Function to recall values from `remember-set'.")
46 (let ,(cl-first list)
47 (setf (symbol-function ',reset-fn)
48 (lambda ()
49 ,@(cl-second list))))
50 ,@(cl-third list)
51 ',reset-fn)))
52
53;; test
54
55(set 'fn (remember-set display-fill-column-indicator-mode disable))
56(funcall fn)