From: Andrew Cohen <cohen@andy.bu.edu>
To: ding@gnus.org
Subject: Re: A T does not work in nnimap
Date: Tue, 12 Oct 2010 19:43:11 -0400 [thread overview]
Message-ID: <87mxqjvuy8.fsf@andy.bu.edu> (raw)
In-Reply-To: <874ocrwjxu.fsf@andy.bu.edu>
[-- Attachment #1: Type: text/plain, Size: 212 bytes --]
OK here is a first pass at modifying gnus-summary-refer-thread to work
with imap. It seemed like a good idea to factor out a thread-searching
function for nnimap, so I did.
Only lightly tested.
Regards,
Andy
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: imap threading changes --]
[-- Type: text/x-diff, Size: 5102 bytes --]
diff --git a/lisp/nnir.el b/lisp/nnir.el
index 2a264d1..2dcebe6 100644
--- a/lisp/nnir.el
+++ b/lisp/nnir.el
@@ -343,7 +343,8 @@
(eval-when-compile
(autoload 'nnimap-buffer "nnimap")
(autoload 'nnimap-command "nnimap")
- (autoload 'nnimap-possibly-change-group "nnimap"))
+ (autoload 'nnimap-possibly-change-group "nnimap")
+ (autoload 'nnimap-find-thread "nnimap"))
(nnoo-declare nnir)
(nnoo-define-basics nnir)
@@ -717,21 +718,8 @@ and show thread that contains this article."
(refs (split-string
(mail-header-references (gnus-summary-article-header)))))
(if (string= (car (gnus-group-method group)) "nnimap")
- (with-current-buffer (nnimap-buffer)
- (let* ((cmd (let ((value
- (format
- "(OR HEADER REFERENCES %s HEADER Message-Id %s)"
- id id)))
- (dolist (refid refs value)
- (setq value (format
- "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
- refid refid value)))))
- (result (nnimap-command
- "UID SEARCH %s" cmd)))
- (gnus-summary-read-group-1 group t t gnus-summary-buffer nil
- (and (car result)
- (delete 0 (mapcar #'string-to-number
- (cdr (assoc "SEARCH" (cdr result)))))))))
+ (gnus-summary-read-group-1 group t t gnus-summary-buffer nil
+ (nnimap-find-thread id refs))
(gnus-summary-read-group-1 group t t gnus-summary-buffer
nil (list backend-number))
(gnus-summary-limit (list backend-number))
diff --git a/lisp/nnimap.el b/lisp/nnimap.el
index c6c8787..5de8518 100644
--- a/lisp/nnimap.el
+++ b/lisp/nnimap.el
@@ -1659,6 +1659,22 @@ textual parts.")
group-art))
nnimap-incoming-split-list)))
+(defun nnimap-find-thread (id refs)
+ (let* ((cmd (let ((value
+ (format
+ "(OR HEADER REFERENCES %s HEADER Message-Id %s)"
+ id id)))
+ (dolist (refid refs value)
+ (setq value (format
+ "(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
+ refid refid value)))))
+ (result (with-current-buffer (nnimap-buffer)
+ (nnimap-command
+ "UID SEARCH %s" cmd))))
+ (and (car result)
+ (delete 0 (mapcar #'string-to-number
+ (cdr (assoc "SEARCH" (cdr result))))))))
+
(provide 'nnimap)
;;; nnimap.el ends here
diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el
index 1086e28..a2f7a90 100644
--- a/lisp/gnus-sum.el
+++ b/lisp/gnus-sum.el
@@ -60,6 +60,7 @@
(autoload 'gnus-article-outlook-unwrap-lines "deuglify" nil t)
(autoload 'gnus-article-outlook-repair-attribution "deuglify" nil t)
(autoload 'gnus-article-outlook-rearrange-citation "deuglify" nil t)
+(autoload 'nnimap-find-thread "nnimap")
(defcustom gnus-kill-summary-on-exit t
"*If non-nil, kill the summary buffer when you exit from it.
@@ -8828,28 +8829,35 @@ If LIMIT (the numerical prefix), fetch that many old headers instead
of what's specified by the `gnus-refer-thread-limit' variable."
(interactive "P")
(let ((id (mail-header-id (gnus-summary-article-header)))
+ (refs (split-string (or
+ (mail-header-references (gnus-summary-article-header)) "")))
(limit (if limit (prefix-numeric-value limit)
gnus-refer-thread-limit)))
- (unless (eq gnus-fetch-old-headers 'invisible)
- (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
- ;; Retrieve the headers and read them in.
- (if (eq (if (numberp limit)
- (gnus-retrieve-headers
- (list (min
- (+ (mail-header-number
- (gnus-summary-article-header))
- limit)
- gnus-newsgroup-end))
- gnus-newsgroup-name (* limit 2))
- ;; gnus-refer-thread-limit is t, i.e. fetch _all_
- ;; headers.
- (gnus-retrieve-headers (list gnus-newsgroup-end)
- gnus-newsgroup-name limit))
- 'nov)
- (gnus-build-all-threads)
- (error "Can't fetch thread from back ends that don't support NOV"))
- (gnus-message 5 "Fetching headers for %s...done" gnus-newsgroup-name))
- (gnus-summary-limit-include-thread id)))
+ (if (string= (car (gnus-group-method gnus-newsgroup-name)) "nnimap")
+ (progn (gnus-select-newsgroup gnus-newsgroup-name nil
+ (nnimap-find-thread id refs))
+ (when gnus-build-sparse-threads
+ (gnus-build-sparse-threads)))
+ (unless (eq gnus-fetch-old-headers 'invisible)
+ (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
+ ;; Retrieve the headers and read them in.
+ (if (eq (if (numberp limit)
+ (gnus-retrieve-headers
+ (list (min
+ (+ (mail-header-number
+ (gnus-summary-article-header))
+ limit)
+ gnus-newsgroup-end))
+ gnus-newsgroup-name (* limit 2))
+ ;; gnus-refer-thread-limit is t, i.e. fetch _all_
+ ;; headers.
+ (gnus-retrieve-headers (list gnus-newsgroup-end)
+ gnus-newsgroup-name limit))
+ 'nov)
+ (gnus-build-all-threads)
+ (error "Can't fetch thread from back ends that don't support NOV"))
+ (gnus-message 5 "Fetching headers for %s...done" gnus-newsgroup-name)))
+ (gnus-summary-limit-include-thread id)))
(defun gnus-summary-refer-article (message-id)
"Fetch an article specified by MESSAGE-ID."
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: ChangeLog --]
[-- Type: text/x-diff, Size: 476 bytes --]
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ab64bcc..c809021 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2010-10-12 Andrew Cohen <cohen@andy.bu.edu>
+
+ * nnimap.el (nnimap-find-thread): New function.
+
+ * nnir.el (gnus-summary-nnir-goto-thread): Use it.
+
+ * gnus-sum.el (gnus-summary-refer-thread): Modify to work with
+ imap.
+
2010-10-12 Katsumi Yamaoka <yamaoka@jpl.org>
* gnus-gravatar.el (gnus-gravatar-too-ugly): Don't test if
next prev parent reply other threads:[~2010-10-12 23:43 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-07 11:00 Julien Danjou
2010-10-07 18:13 ` Lars Magne Ingebrigtsen
2010-10-12 13:28 ` Julien Danjou
2010-10-12 13:50 ` Lars Magne Ingebrigtsen
2010-10-12 14:18 ` Julien Danjou
2010-10-12 14:43 ` Andrew Cohen
2010-10-12 23:43 ` Andrew Cohen [this message]
2010-10-13 13:55 ` Julien Danjou
2010-10-13 15:30 ` Andrew Cohen
2010-10-13 15:42 ` Julien Danjou
2010-10-13 17:21 ` Lars Magne Ingebrigtsen
2010-10-13 17:56 ` Andrew Cohen
2010-10-13 18:29 ` Lars Magne Ingebrigtsen
2010-10-13 20:59 ` Andrew Cohen
2010-10-13 21:11 ` Lars Magne Ingebrigtsen
2010-10-13 21:30 ` Andrew Cohen
2010-10-13 21:37 ` Lars Magne Ingebrigtsen
2010-10-13 21:59 ` Andrew Cohen
2010-10-13 22:06 ` Lars Magne Ingebrigtsen
2010-10-14 0:38 ` Andrew Cohen
2010-10-14 12:57 ` Andrew Cohen
2010-10-14 18:00 ` Lars Magne Ingebrigtsen
2010-10-14 18:45 ` Andrew Cohen
2010-10-14 19:02 ` Lars Magne Ingebrigtsen
2010-10-15 11:02 ` Julien Danjou
2010-10-15 11:24 ` Andrew Cohen
2010-10-15 11:29 ` Julien Danjou
2010-10-15 11:53 ` Steinar Bang
2010-10-15 12:01 ` Julien Danjou
2010-10-15 12:00 ` Andrew Cohen
2010-10-15 12:06 ` Julien Danjou
2010-10-15 12:17 ` Andrew Cohen
2010-10-15 12:26 ` Andrew Cohen
2010-10-15 18:26 ` Julien Danjou
2010-10-16 12:58 ` Andrew Cohen
2010-10-16 18:16 ` Lars Magne Ingebrigtsen
2010-10-15 14:03 ` Lars Magne Ingebrigtsen
2010-10-15 12:11 ` Andrew Cohen
2010-10-15 12:28 ` Julien Danjou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87mxqjvuy8.fsf@andy.bu.edu \
--to=cohen@andy.bu.edu \
--cc=ding@gnus.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).