At Sun, 22 Aug 2010 16:06:48 -0800,
David Abrahams wrote:
>
> At Sun, 22 Aug 2010 14:48:26 -0700,
> Erik Hetzner wrote:
> >
> > 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.
>
> I feel certain it's a bug, though there are a few places in the code
> that look suspiciously as though they're relying on that bug by
> assuming references contains a single UID.
That sounds like it could be a difficult bug to fix if it is that
entrenched.
> > Here is another version based on the code in
> > wl-summary-jump-to-parent-message which works around the problem.
>
> Yes! However, I think you may be making the filter more complicated
> than absolutely necessary. I'm not sure whether that slows things
> down or not, but again, unless M[TU]As are ill-behaved, it should be
> enough to find every message whose message-id or references field
> contain the first UID in references.
Of course, I should have read that post more carefully. I didn’t know
that References was an ordered list. That simplifies the code a lot.
> > 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.
>
> All UIDs, hmm, that seems like another bug. I guess this could be a
> lot faster if it didn't have to do that.
>
> > Does anybody know why this is happening, or how it might be
> > prevented?
>
> Do you think those concerned are likely to be paying attention to this
> thread? Maybe we should post both these issues as separate bug
> reports.
It’s not strictly a bug, I think, but perhaps unexpected &
unnecessary(?) behavior. Visiting the filter folder calls
elmo-folder-synchronize on the filter folder which calls
elmo-folder-synchronize on the IMAP folder, which calls
elmo-folder-list-messages, which results in all messages being
returned. This does not seem strictly necessary, but perhaps it
is.
Here is a new version of this function. I have bound it to X for the
time being, and if it is called with C-u it should jump back to where
you came from.
best, Erik
(defvar egh:wl-summary-prev-folder-name nil)
(defun egh:wl-summary-visit-conversation (&optional close)
(interactive "P")
(if close
(if egh:wl-summary-prev-folder-name
(wl-summary-goto-folder-subr egh:wl-summary-prev-folder-name
'no-sync nil nil t)
(message "No previous folder to visit."))
(let (folder-name prev-folder-name)
(save-excursion
(setq prev-folder-name wl-summary-buffer-folder-name)
(wl-summary-set-message-buffer-or-redisplay)
(set-buffer (wl-message-get-original-buffer))
(let* ((ref (substring (car (split-string (or (std11-field-body "References")
(std11-field-body "Message-Id")))) 1 -1)))
(setq folder-name (concat "/message-id:\"" ref
"\"|references:\"" ref
"\"/" (egh:wl-all-folder)))))
(wl-summary-goto-folder-subr folder-name 'update nil nil t)
(setq egh:wl-summary-prev-folder-name prev-folder-name)
(make-local-variable 'egh:wl-summary-prev-folder-name))))
(define-key wl-summary-mode-map "X" 'egh:wl-summary-visit-conversation)
Attachment:
pgpwClqhVMoQ8.pgp
Description: PGP signature