emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/setup a73bf19 2/4: Rewrite setup-make-setter to return


From: ELPA Syncer
Subject: [elpa] externals/setup a73bf19 2/4: Rewrite setup-make-setter to return a macro function
Date: Mon, 1 Nov 2021 14:57:42 -0400 (EDT)

branch: externals/setup
commit a73bf19e6cb79b14bd733f0735947b6f0bc915c0
Author: Philip Kaludercic <philipk@posteo.net>
Commit: Philip Kaludercic <philipk@posteo.net>

    Rewrite setup-make-setter to return a macro function
---
 setup.el | 94 +++++++++++++++++++++++++++++++---------------------------------
 1 file changed, 46 insertions(+), 48 deletions(-)

diff --git a/setup.el b/setup.el
index e6ca202..4b3e48e 100644
--- a/setup.el
+++ b/setup.el
@@ -285,35 +285,36 @@ If RETURN is given, throw that value."
          `#',sexp)
         (sexp)))
 
-(defun setup-make-setter (name val old-val-fn wrap-fn)
-  "Convert NAME and VAL into setter code.
-The function OLD-VAL-FN is used to extract the old value of
-VAL.  The function WRAP-FN combines the transformed values of NAME
-and VAL into one s-expression."
-  (cond ((symbolp name) (funcall wrap-fn name val))
-        ((eq (car-safe name) 'append)
-         (funcall wrap-fn
-                  (cadr name)
-                  (let ((sym (gensym)))
-                    `(let ((,sym ,val)
-                           (list ,(funcall old-val-fn (cadr name))))
-                       (if (member ,sym list)
-                           list
-                         (append list (list ,sym)))))))
-        ((eq (car-safe name) 'prepend)
-         (funcall wrap-fn
-                  (cadr name)
-                  (let ((sym (gensym)))
-                    `(let ((,sym ,val)
-                           (list ,(funcall old-val-fn (cadr name))))
-                       (if (member ,sym list)
-                           list
-                         (cons ,sym list))))))
-        ((eq (car-safe name) 'remove)
-         (funcall wrap-fn
-                  (cadr name)
-                  `(remove ,val ,(funcall old-val-fn (cadr name)))))
-        ((error "Invalid option %S" name))))
+(defun setup-make-setter (old-val-fn wrap-fn)
+  "Return a macro function to generate a setter.
+The function OLD-VAL-FN is used to extract the old value of VAL.
+The function WRAP-FN combines the transformed values of NAME and
+VAL into one s-expression."
+  (lambda (name val)
+    (cond ((symbolp name) (funcall wrap-fn name val))
+          ((eq (car-safe name) 'append)
+           (funcall wrap-fn
+                    (cadr name)
+                    (let ((sym (gensym)))
+                      `(let ((,sym ,val)
+                             (list ,(funcall old-val-fn (cadr name))))
+                         (if (member ,sym list)
+                             list
+                           (append list (list ,sym)))))))
+          ((eq (car-safe name) 'prepend)
+           (funcall wrap-fn
+                    (cadr name)
+                    (let ((sym (gensym)))
+                      `(let ((,sym ,val)
+                             (list ,(funcall old-val-fn (cadr name))))
+                         (if (member ,sym list)
+                             list
+                           (cons ,sym list))))))
+          ((eq (car-safe name) 'remove)
+           (funcall wrap-fn
+                    (cadr name)
+                    `(remove ,val ,(funcall old-val-fn (cadr name)))))
+          ((error "Invalid option %S" name)))))
 
 
 ;;; Default local macros definitions
@@ -479,18 +480,17 @@ The arguments REST are handled as by `:bind'."
   :repeatable t)
 
 (setup-define :option
-  (lambda (name val)
-    (setup-make-setter
-     name val
-     (lambda (name)
-       `(funcall (or (get ',name 'custom-get)
-                     #'symbol-value)
-                 ',name))
-     (lambda (name val)
-       `(progn
-          (custom-load-symbol ',name)
-          (funcall (or (get ',name 'custom-set) #'set-default)
-                   ',name ,val)))))
+  (setup-make-setter
+   (lambda (name)
+     `(funcall (or (get ',name 'custom-get)
+                   #'symbol-value)
+               ',name))
+   (lambda (name val)
+     `(progn
+        (custom-load-symbol ',name)
+        (funcall (or (get ',name 'custom-set) #'set-default)
+                 ',name ,val))))
+
   :documentation "Set the option NAME to VAL.
 NAME may be a symbol, or a cons-cell.  If NAME is a cons-cell, it
 will use the car value to modify the behaviour.  These forms are
@@ -515,13 +515,11 @@ therefore not be stored in `custom-set-variables' blocks."
   :repeatable t)
 
 (setup-define :local-set
-  (lambda (name val)
-    (setup-make-setter
-     name val
-     (lambda (name)
-       (if (consp name) (cadr name) name))
-     (lambda (name val)
-       `(add-hook ',(setup-get 'hook) (lambda () (setq-local ,name ,val))))))
+  (setup-make-setter
+   (lambda (name)
+     (if (consp name) (cadr name) name))
+   (lambda (name val)
+     `(add-hook ',(setup-get 'hook) (lambda () (setq-local ,name ,val)))))
   :documentation "Set the value of NAME to VAL in buffers of the current mode.
 NAME may be a symbol, or a cons-cell.  If NAME is a cons-cell, it
 will use the car value to modify the behaviour. These forms are



reply via email to

[Prev in Thread] Current Thread [Next in Thread]