gnus-sum.el (gnus-summary-refer-thread): Don't clobber unread articles
authorJohan Bockgård <bojohan@gnu.org>
Sun, 12 Apr 2015 22:40:46 +0000 (22:40 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Sun, 12 Apr 2015 22:40:46 +0000 (22:40 +0000)
This fixes a bug where `A T' causes "random" articles to become marked
as read.

lisp/ChangeLog
lisp/gnus-sum.el

index ab7a2a8..651de2f 100644 (file)
@@ -1,4 +1,9 @@
-2015-04-12  João Távora  <joaotavora@gmail.com>
+2015-04-12  Johan Bockgård  <bojohan@gnu.org>
+
+       * gnus-sum.el (gnus-summary-refer-thread):
+       Make sure gnus-newsgroup-unreads remains sorted.
+
+2015-04-12  João Távora  <joaotavora@gmail.com>
 
        Improve sexp-based movement in message-mode
        * message.el (message--syntax-propertize): New function.
 
        Improve sexp-based movement in message-mode
        * message.el (message--syntax-propertize): New function.
index c68d496..73a0d4b 100644 (file)
@@ -9068,22 +9068,24 @@ non-numeric or nil fetch the number specified by the
                       (regexp-opt ',(append refs (list id subject)))))))
              (gnus-fetch-headers (list last) (if (numberp limit)
                                                  (* 2 limit) limit) t))))
                       (regexp-opt ',(append refs (list id subject)))))))
              (gnus-fetch-headers (list last) (if (numberp limit)
                                                  (* 2 limit) limit) t))))
-        article-ids)
+        article-ids new-unreads)
     (when (listp new-headers)
       (dolist (header new-headers)
     (when (listp new-headers)
       (dolist (header new-headers)
-       (push (mail-header-number header) article-ids)
-       (when (member (mail-header-number header) gnus-newsgroup-unselected)
-          (push (mail-header-number header) gnus-newsgroup-unreads)
-          (setq gnus-newsgroup-unselected
-                (delete (mail-header-number header)
-                       gnus-newsgroup-unselected))))
+       (push (mail-header-number header) article-ids))
+      (setq article-ids (nreverse article-ids))
+      (setq new-unreads
+           (gnus-sorted-intersection gnus-newsgroup-unselected article-ids))
+      (setq gnus-newsgroup-unselected
+           (gnus-sorted-ndifference gnus-newsgroup-unselected new-unreads))
+      (setq gnus-newsgroup-unreads
+           (gnus-sorted-nunion gnus-newsgroup-unreads new-unreads))
       (setq gnus-newsgroup-headers
             (gnus-delete-duplicate-headers
              (gnus-merge
               'list gnus-newsgroup-headers new-headers
               'gnus-article-sort-by-number)))
       (setq gnus-newsgroup-articles
       (setq gnus-newsgroup-headers
             (gnus-delete-duplicate-headers
              (gnus-merge
               'list gnus-newsgroup-headers new-headers
               'gnus-article-sort-by-number)))
       (setq gnus-newsgroup-articles
-           (gnus-sorted-nunion gnus-newsgroup-articles (nreverse article-ids)))
+           (gnus-sorted-nunion gnus-newsgroup-articles article-ids))
       (gnus-summary-limit-include-thread id)))
   (gnus-summary-show-thread))
 
       (gnus-summary-limit-include-thread id)))
   (gnus-summary-show-thread))