At Sun, 22 Aug 2010 11:08:46 -0800, Dave Abrahams wrote: > > On Fri, Aug 20, 2010 at 12:07 PM, Erik Hetzner <ehetzner@gmail.com> wrote: > > The real trouble is that we need to > > follow the trail of references up to the first message to really get > > the full thread, which entails a back-and-forth with the IMAP server. > > AHA! So I was reading through your code and wondered about this bit: > > > (defun egh:wl-all-folder () > > "%xxx:xxx@xxx.com:993!") > > > > (defun egh:wl-summary-visit-conversation () > > (interactive) > > (let* ((f (lambda (str) > > (mapcar (lambda (msgid) > > (substring msgid 1 -1)) > > (split-string str " ")))) > ^^^ > ...because from looking at raw messages, I know that message ids in > "References:" are often split by all kinds of whitespace. In particular, > newlines are common. So then I traced through some of this code with Edebug > and discovered that... > > > (msg (elmo-message-entity > > wl-summary-buffer-elmo-folder > > wl-summary-buffer-current-msg)) > > (ids (append > > (funcall f (elmo-message-entity-field msg 'message-id)) > > (funcall f (elmo-message-entity-field msg 'references))))) > ^^^^^^^^^^^^^^^^^^^^^^^^^ > ...here, elmo was returning only the very last message-ID in all the entity's > References:, which was on a line by itself (maybe why you thought splitting > on spaces was OK?"). So I think we have an elmo bug that presumably > could be easily > fixed! Hi Dave, Thanks for debugging my code & my thinking! You are correct. I assumed we needed to gather more references because my code wasn’t working as expected, but it does seem we are not getting all references from the msgdb. I don’t know why the msgdb is not keeping all the references around. Here is another version based on the code in wl-summary-jump-to-parent-message which works around the problem. I notice when turning on elmo-imap4-debug that WL does a search for: uid search all undeleted when performing this filter, which retrieves all uids. Does anybody know why this is happening, or how it might be prevented? best, Erik (defun egh:wl-summary-visit-conversation () (interactive) (let ((folder-name)) (save-excursion (wl-summary-set-message-buffer-or-redisplay) (set-buffer (wl-message-get-original-buffer)) (let* ((clean-and-split-ids (lambda (str) (mapcar (lambda (msgid) (substring msgid 1 -1)) (split-string str)))) (ids (append (funcall clean-and-split-ids (std11-field-body "Message-Id")) (funcall clean-and-split-ids (std11-field-body "References")))) (search-condition (mapconcat (lambda (ref) (concat "message-id:\"" ref "\"|references:\"" ref "\"")) ids "|"))) (setq folder-name (concat "/" search-condition "/" (egh:wl-all-folder))))) (wl-summary-goto-folder-subr folder-name 'update nil nil t)))
Attachment:
pgpHUWlQRT2vb.pgp
Description: PGP signature