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