summaryrefslogtreecommitdiff
path: root/lisp/gnus/gnus-sum.el
diff options
context:
space:
mode:
authorGnus developers <ding@gnus.org>2011-07-19 22:19:06 +0000
committerKatsumi Yamaoka <yamaoka@jpl.org>2011-07-19 22:19:06 +0000
commitae97e6451dc1d2b7454e39953f202a63ed54a2ae (patch)
tree7d117800fce9a27095953e8a4ead1e734f796230 /lisp/gnus/gnus-sum.el
parent92e15d10a641b7877b91436ab215acb9d9c16f22 (diff)
downloademacs-ae97e6451dc1d2b7454e39953f202a63ed54a2ae.tar.gz
Merge changes made in Gnus trunk.
gnus-group.el (gnus-group-read-ephemeral-group): Make sure we don't enter invalid buffer configurations into the quit form (bug#9107). (gnus-group-tool-bar-gnome): Replace connect/disconnect with unplugged/plugged. 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). gnus-art.el (gnus-article-show-images): Allow working if using w3m (bug#9041). gnus-html.el (mm-util): Require (bug#9073). gnus-sum.el (gnus-delete-duplicate-headers): New function. (gnus-summary-refer-thread): Use it to remove duplicates in the un-threaded view (bug#9053). (gnus-summary-insert-subject): Document USE-OLD-HEADER (bug#9070). nnir.el (nnir-read-server-parm): Use default value from global variable. Without this the default search engine parameters aren't used at all. message.el (message-unique-id): Don't use the undocumented return value from (random t) (bug#9118).
Diffstat (limited to 'lisp/gnus/gnus-sum.el')
-rw-r--r--lisp/gnus/gnus-sum.el71
1 files changed, 48 insertions, 23 deletions
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 5a817e12104..86ff0180f55 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -6562,7 +6562,10 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
(defun gnus-summary-insert-subject (id &optional old-header use-old-header)
"Find article ID and insert the summary line for that article.
OLD-HEADER can either be a header or a line number to insert
-the subject line on."
+the subject line on.
+If USE-OLD-HEADER is non-nil, then OLD-HEADER should be a header,
+and OLD-HEADER will be used when the summary line is inserted,
+too, instead of trying to fetch new headers."
(let* ((line (and (numberp old-header) old-header))
(old-header (and (vectorp old-header) old-header))
(header (cond ((and old-header use-old-header)
@@ -8950,6 +8953,21 @@ Return the number of articles fetched."
(gnus-summary-position-point)
n)))
+(defun gnus-delete-duplicate-headers (headers)
+ ;; First remove leading duplicates.
+ (while (and (> (length headers) 1)
+ (= (mail-header-number (car headers))
+ (mail-header-number (cadr headers))))
+ (pop headers))
+ ;; Then the rest.
+ (let ((result headers))
+ (while (> (length headers) 1)
+ (if (= (mail-header-number (car headers))
+ (mail-header-number (cadr headers)))
+ (setcdr headers (cddr headers))
+ (pop headers)))
+ result))
+
(defun gnus-summary-refer-thread (&optional limit)
"Fetch all articles in the current thread.
If no backend-specific 'request-thread function is available
@@ -8964,29 +8982,36 @@ 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-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)))
- 'gnus-article-sort-by-number))
+ (gnus-delete-duplicate-headers
+ (gnus-merge
+ 'list gnus-newsgroup-headers new-headers
+ 'gnus-article-sort-by-number)))
(gnus-summary-limit-include-thread id)))
(defun gnus-summary-refer-article (message-id)