From: Katsumi Yamaoka Date: Wed, 23 Dec 2015 23:08:17 +0000 (+0000) Subject: Fix `gnus-union' so as to behave like `cl-union' X-Git-Url: http://cgit.sxemacs.org/?p=gnus;a=commitdiff_plain;h=ac9f01c45db8c08ffa835bbcdc2662ed14f40a73 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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index aab4aeccd..058e47a23 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2015-12-23 Katsumi Yamaoka + + 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 * auth-source.el (auth-source-ensure-strings): diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index b1a4933eb..9f272f425 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -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) diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 40e2dcf92..6759c0715 100644 --- a/lisp/gnus-util.el +++ b/lisp/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"