diff options
Diffstat (limited to 'lisp/gnus/gnus-util.el')
-rw-r--r-- | lisp/gnus/gnus-util.el | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/lisp/gnus/gnus-util.el b/lisp/gnus/gnus-util.el index 933387da559..63ae2e628d1 100644 --- a/lisp/gnus/gnus-util.el +++ b/lisp/gnus/gnus-util.el @@ -1372,18 +1372,25 @@ Return the modified alist." (if (fboundp 'union) (defalias 'gnus-union 'union) - (defun gnus-union (l1 l2) - "Set union of lists L1 and L2." + (defun gnus-union (l1 l2 &rest keys) + "Set union of lists L1 and L2. +If KEYS contains the `:test' and `equal' pair, use `equal' to compare +items in lists, otherwise use `eq'." (cond ((null l1) l2) ((null l2) l1) ((equal l1 l2) l1) (t (or (>= (length l1) (length l2)) (setq l1 (prog1 l2 (setq l2 l1)))) - (while l2 - (or (member (car l2) l1) - (push (car l2) l1)) - (pop l2)) + (if (eq 'equal (plist-get keys :test)) + (while l2 + (or (member (car l2) l1) + (push (car l2) l1)) + (pop l2)) + (while l2 + (or (memq (car l2) l1) + (push (car l2) l1)) + (pop l2))) l1)))) (declare-function gnus-add-text-properties "gnus" |