branch: externals/setup commit ec23802d4c88a3f02ddf5660ee45a5db3e2c6b19 Author: Philip K <phil...@posteo.net> Commit: Philip K <phil...@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)))