Fix `gnus-union' so as to behave like `cl-union'
authorKatsumi Yamaoka <yamaoka@jpl.org>
Wed, 23 Dec 2015 23:08:17 +0000 (23:08 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Wed, 23 Dec 2015 23:08:17 +0000 (23:08 +0000)
* gnus-group.el (gnus-group-prepare-flat):
Make gnus-union use `equal' to compare items in lists.

* gnus-util.el (gnus-union): Make it behave like cl-union partially.

lisp/ChangeLog
lisp/gnus-group.el
lisp/gnus-util.el

index aab4aec..058e47a 100644 (file)
@@ -1,3 +1,12 @@
+2015-12-23  Katsumi Yamaoka  <yamaoka@jpl.org>
+
+       Fix `gnus-union' so as to behave like `cl-union'.
+
+       * gnus-group.el (gnus-group-prepare-flat):
+       Make gnus-union use `equal' to compare items in lists.
+
+       * gnus-util.el (gnus-union): Make it behave like cl-union partially.
+
 2015-12-17  Eli Zaretskii  <eliz@gnu.org>
 
        * auth-source.el (auth-source-ensure-strings):
index b1a4933..9f272f4 100644 (file)
@@ -1396,7 +1396,8 @@ if it is a string, only list groups matching REGEXP."
       (gnus-group-prepare-flat-list-dead
        (gnus-union
        not-in-list
-       (setq gnus-killed-list (sort gnus-killed-list 'string<)))
+       (setq gnus-killed-list (sort gnus-killed-list 'string<))
+       :test 'equal)
        gnus-level-killed ?K regexp))
 
     (gnus-group-set-mode-line)
index 40e2dcf..6759c07 100644 (file)
@@ -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"