diff options
author | Gnus developers <ding@gnus.org> | 2011-07-19 22:19:06 +0000 |
---|---|---|
committer | Katsumi Yamaoka <yamaoka@jpl.org> | 2011-07-19 22:19:06 +0000 |
commit | ae97e6451dc1d2b7454e39953f202a63ed54a2ae (patch) | |
tree | 7d117800fce9a27095953e8a4ead1e734f796230 /lisp/gnus/gnus-sum.el | |
parent | 92e15d10a641b7877b91436ab215acb9d9c16f22 (diff) | |
download | emacs-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.el | 71 |
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) |