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

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

[elpa] externals/setup ec23802 04/25: Check for duplicate elements with


From: Stefan Monnier
Subject: [elpa] externals/setup ec23802 04/25: Check for duplicate elements with append/remove
Date: Wed, 14 Apr 2021 18:48:59 -0400 (EDT)

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

    Check for duplicate elements with append/remove
---
 setup.el | 36 ++++++++++++++++++++++++++----------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/setup.el b/setup.el
index 07421f7..8f0017b 100644
--- a/setup.el
+++ b/setup.el
@@ -324,16 +324,24 @@ the first FEATURE."
     (cond ((symbolp name) t)
           ((eq (car-safe name) 'append)
            (setq name (cadr name)
-                 val `(append (funcall (or (get ',name 'custom-get)
-                                           #'symbol-value)
-                                       ',name)
-                              (list ,val))))
+                 val (let ((sym (gensym)))
+                       `(let ((,sym ,val)
+                              (list (funcall (or (get ',name 'custom-get)
+                                                 #'symbol-value)
+                                             ',name)))
+                          (if (member ,sym list)
+                              list
+                            (append list (list ,sym)))))))
           ((eq (car-safe name) 'prepend)
            (setq name (cadr name)
-                 val `(cons ,val
-                            (funcall (or (get ',name 'custom-get)
-                                         #'symbol-value)
-                                     ',name))))
+                 val (let ((sym (gensym)))
+                       `(let ((,sym ,val)
+                              (list (funcall (or (get ',name 'custom-get)
+                                                 #'symbol-value)
+                                             ',name)))
+                          (if (member ,sym list)
+                              list
+                            (cons ,sym list))))))
           ((error "Invalid option %S" name)))
     `(customize-set-variable ',name ,val "Modified by `setup'"))
   :documentation "Set the option NAME to VAL.
@@ -358,10 +366,18 @@ form (remove VAR), VAL is removed from VAR."
     (cond ((symbolp name) t)
           ((eq (car-safe name) 'append)
            (setq name (cadr name)
-                 val `(append ,name (list val))))
+                 val (let ((sym (gensym)))
+                       `(let ((,sym ,val) (list ,name))
+                          (if (member ,sym list)
+                              list
+                            (append list (list ,sym)))))))
           ((eq (car-safe name) 'prepend)
            (setq name (cadr name)
-                 val `(cons ,val ,name)))
+                 val (let ((sym (gensym)))
+                       `(let ((,sym ,val) (list ,name))
+                          (if (member ,sym list)
+                              list
+                            (cons ,sym list))))))
           ((eq (car-safe name) 'remove)
            (setq name (cadr name)
                  val `(remove ,val ,name)))



reply via email to

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