From 8c0d252681e082751a5925886facbcca21f87377 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Tue, 19 Jul 2011 20:04:54 +0200 Subject: [PATCH] When inserting new headers, keep track of which ones are unread --- lisp/ChangeLog | 3 +++ lisp/gnus-sum.el | 46 ++++++++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9303c64f7..29ed11a71 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2011-07-19 Lars Magne Ingebrigtsen + * gnus-sum.el (gnus-summary-refer-thread): When inserting new headers, + keep track of which ones are unread (bug#9061). + * gnus.el (gnus-refer-article-method): Allow entering any sexp (bug#9055). diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 245d24476..86ff0180f 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -8982,29 +8982,35 @@ variable." (gnus-summary-ignore-duplicates t) (gnus-read-all-available-headers t) (limit (if limit (prefix-numeric-value limit) - gnus-refer-thread-limit))) + gnus-refer-thread-limit)) + (new-headers + (if (gnus-check-backend-function + 'request-thread gnus-newsgroup-name) + (gnus-request-thread header gnus-newsgroup-name) + (let* ((last (if (numberp limit) + (min (+ (mail-header-number header) + limit) + gnus-newsgroup-highest) + gnus-newsgroup-highest)) + (subject (gnus-simplify-subject + (mail-header-subject header))) + (refs (split-string (or (mail-header-references header) + ""))) + (gnus-parse-headers-hook + (lambda () (goto-char (point-min)) + (keep-lines + (regexp-opt (append refs (list id subject))))))) + (gnus-fetch-headers (list last) (if (numberp limit) + (* 2 limit) limit) t))))) + (dolist (header new-headers) + (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)))) (setq gnus-newsgroup-headers (gnus-delete-duplicate-headers (gnus-merge - 'list gnus-newsgroup-headers - (if (gnus-check-backend-function - 'request-thread gnus-newsgroup-name) - (gnus-request-thread header gnus-newsgroup-name) - (let* ((last (if (numberp limit) - (min (+ (mail-header-number header) - limit) - gnus-newsgroup-highest) - gnus-newsgroup-highest)) - (subject (gnus-simplify-subject - (mail-header-subject header))) - (refs (split-string (or (mail-header-references header) - ""))) - (gnus-parse-headers-hook - (lambda () (goto-char (point-min)) - (keep-lines - (regexp-opt (append refs (list id subject))))))) - (gnus-fetch-headers (list last) (if (numberp limit) - (* 2 limit) limit) t))) + 'list gnus-newsgroup-headers new-headers 'gnus-article-sort-by-number))) (gnus-summary-limit-include-thread id))) -- 2.25.1