mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-17 10:27:41 +00:00
Merge changes made in Gnus trunk.
nnir.el (nnir-search-thread): New function to make an nnir group based on a thread query. gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use of nnir in thread referral. (gnus-summary-refer-thread): Use it. nnimap.el (nnimap-request-thread): Use it.
This commit is contained in:
parent
04c4b52e0a
commit
47f0b35ef3
4 changed files with 69 additions and 28 deletions
|
|
@ -1,3 +1,14 @@
|
|||
2011-07-23 Andrew Cohen <cohen@andy.bu.edu>
|
||||
|
||||
* nnir.el (nnir-search-thread): New function to make an nnir group
|
||||
based on a thread query.
|
||||
|
||||
* gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use
|
||||
of nnir in thread referral.
|
||||
(gnus-summary-refer-thread): Use it.
|
||||
|
||||
* nnimap.el (nnimap-request-thread): Use it.
|
||||
|
||||
2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* shr.el (shr-tag-comment): Ignore HTML comments.
|
||||
|
|
|
|||
|
|
@ -118,6 +118,13 @@ If t, fetch all the available old headers."
|
|||
:type '(choice number
|
||||
(sexp :menu-tag "other" t)))
|
||||
|
||||
(defcustom gnus-refer-thread-use-nnir nil
|
||||
"*Use nnir to search an entire server when referring threads. A
|
||||
nil value will only search for thread-related articles in the
|
||||
current group."
|
||||
:group 'gnus-thread
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom gnus-summary-make-false-root 'adopt
|
||||
"*nil means that Gnus won't gather loose threads.
|
||||
If the root of a thread has expired or been read in a previous
|
||||
|
|
@ -8972,11 +8979,16 @@ Return the number of articles fetched."
|
|||
result))
|
||||
|
||||
(defun gnus-summary-refer-thread (&optional limit)
|
||||
"Fetch all articles in the current thread.
|
||||
If no backend-specific 'request-thread function is available
|
||||
fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil
|
||||
fetch what's specified by the `gnus-refer-thread-limit'
|
||||
variable."
|
||||
"Fetch all articles in the current thread. For backends that
|
||||
know how to search for threads (currently only 'nnimap) a
|
||||
non-numeric prefix arg will use nnir to search the entire
|
||||
server; without a prefix arg only the current group is
|
||||
searched. If the variable `gnus-refer-thread-use-nnir' is
|
||||
non-nil the prefix arg has the reverse meaning. If no
|
||||
backend-specific 'request-thread function is available fetch
|
||||
LIMIT (the numerical prefix) old headers. If LIMIT is
|
||||
non-numeric or nil fetch the number specified by the
|
||||
`gnus-refer-thread-limit' variable."
|
||||
(interactive "P")
|
||||
(gnus-warp-to-article)
|
||||
(let* ((header (gnus-summary-article-header))
|
||||
|
|
@ -8984,13 +8996,16 @@ variable."
|
|||
(gnus-inhibit-demon t)
|
||||
(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-use-nnir
|
||||
(if (and (not (null limit)) (listp limit))
|
||||
(not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir))
|
||||
(new-headers
|
||||
(if (gnus-check-backend-function
|
||||
'request-thread gnus-newsgroup-name)
|
||||
(gnus-request-thread header gnus-newsgroup-name)
|
||||
(let* ((last (if (numberp limit)
|
||||
(let* ((limit (if (numberp limit) (prefix-numeric-value limit)
|
||||
gnus-refer-thread-limit))
|
||||
(last (if (numberp limit)
|
||||
(min (+ (mail-header-number header)
|
||||
limit)
|
||||
gnus-newsgroup-highest)
|
||||
|
|
@ -9005,17 +9020,19 @@ variable."
|
|||
(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 new-headers
|
||||
'gnus-article-sort-by-number)))
|
||||
(gnus-summary-limit-include-thread id)))
|
||||
(when (listp new-headers)
|
||||
(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 new-headers
|
||||
'gnus-article-sort-by-number)))
|
||||
(gnus-summary-limit-include-thread id))))
|
||||
|
||||
(defun gnus-summary-refer-article (message-id)
|
||||
"Fetch an article specified by MESSAGE-ID."
|
||||
|
|
|
|||
|
|
@ -1566,15 +1566,17 @@ textual parts.")
|
|||
(articles &optional limit force-new dependencies))
|
||||
|
||||
(deffoo nnimap-request-thread (header &optional group server)
|
||||
(when (nnimap-possibly-change-group group server)
|
||||
(let* ((cmd (nnimap-make-thread-query header))
|
||||
(result (with-current-buffer (nnimap-buffer)
|
||||
(nnimap-command "UID SEARCH %s" cmd))))
|
||||
(when result
|
||||
(gnus-fetch-headers
|
||||
(and (car result) (delete 0 (mapcar #'string-to-number
|
||||
(cdr (assoc "SEARCH" (cdr result))))))
|
||||
nil t)))))
|
||||
(if gnus-refer-thread-use-nnir
|
||||
(nnir-search-thread header)
|
||||
(when (nnimap-possibly-change-group group server)
|
||||
(let* ((cmd (nnimap-make-thread-query header))
|
||||
(result (with-current-buffer (nnimap-buffer)
|
||||
(nnimap-command "UID SEARCH %s" cmd))))
|
||||
(when result
|
||||
(gnus-fetch-headers
|
||||
(and (car result) (delete 0 (mapcar #'string-to-number
|
||||
(cdr (assoc "SEARCH" (cdr result))))))
|
||||
nil t))))))
|
||||
|
||||
(defun nnimap-possibly-change-group (group server)
|
||||
(let ((open-result t))
|
||||
|
|
|
|||
|
|
@ -289,6 +289,7 @@ is `(valuefunc member)'."
|
|||
(autoload 'nnimap-buffer "nnimap")
|
||||
(autoload 'nnimap-command "nnimap")
|
||||
(autoload 'nnimap-possibly-change-group "nnimap")
|
||||
(autoload 'nnimap-make-thread-query "nnimap")
|
||||
(autoload 'gnus-registry-action "gnus-registry")
|
||||
(defvar gnus-registry-install))
|
||||
|
||||
|
|
@ -1649,6 +1650,16 @@ server is of form 'backend:name'."
|
|||
(nnir-open-server server)))
|
||||
|
||||
|
||||
(defun nnir-search-thread (header)
|
||||
"Make an nnir group based on the thread containing the article header"
|
||||
(let ((parm (list
|
||||
(cons 'query
|
||||
(nnimap-make-thread-query header))
|
||||
(cons 'criteria "")
|
||||
(cons 'server (gnus-method-to-server
|
||||
(gnus-find-method-for-group
|
||||
gnus-newsgroup-name))))))
|
||||
(gnus-group-make-nnir-group nil parm)))
|
||||
|
||||
;; unused?
|
||||
(defun nnir-artlist-groups (artlist)
|
||||
|
|
|
|||
Loading…
Reference in a new issue