Sigh, where to begin. bbdb-1.50 Using someone's suggested code: ;; logic to use bbdb mail-folder property to set the default for ;; saving message. (defadvice vm-auto-select-folder (around bbdb-auto-select activate compile) "If the message sender's BBDB entry has a `mail-folder' property, use that." (require 'bbdb-com) (let* ((record (bbdb/vm-update-record t)) (folder (and record (bbdb-record-getprop record 'mail-folder)))) (if folder (setq ad-return-value folder) ;; ad-do-it is the original body of vm-auto-select-folder. ad-do-it))) so I can vm-auto-archive-messages (and have a default for interactive vm-save-message) using the mail-folder property extracted from the bbdb record for each message. This appears to work fine until I visit a virtual folder replies that consists of: ("replies" (("INBOX" "netcom" "bccs") (and (not (filed)) (or (and (header "^X-Gec-Originated") (author "beldar\\|gec")) (replied))))) This gets messages from my two main inboxes, as well as the inbox associated with a procmail'ed mbox that filters out my bcc'ed messages. If I do a vm-auto-archive-messages, messages to/from different people who are in the bbdb and have differing mail-folder properties get autofiled to the same folder, apparently the one associated with the first message in the folder. If I move through the virtual folder hitting 's' and noting the proffered response, it's doing the right thing. Is the interface to vm-auto-select-folder public? Can I rely on getting at the message pointer argument in my advice (which would allow me to replace the bbdb/vm-update-record call above with something far simpler and less reliant on the inner workings of vm)? I think what's going wrong is: (defun bbdb/vm-update-record (&optional offer-to-create) "returns the record corresponding to the current VM message, creating or modifying it as necessary. A record will be created if bbdb/mail-auto-create-p is non-nil, or if OFFER-TO-CREATE is true and the user confirms the creation." (save-excursion (and vm-mail-buffer (set-buffer vm-mail-buffer)) (if bbdb-use-pop-up (bbdb/vm-pop-up-bbdb-buffer offer-to-create) (let ((msg (car vm-message-pointer)) (inhibit-local-variables nil) ; vm binds this to t... (enable-local-variables t) ; ...or vm bind this to nil. (inhibit-quit nil)) ; vm damn well better not bind this to t! ;; this doesn't optimize the case of moving thru a folder where ;; few messages have associated records. (or (bbdb-message-cache-lookup msg nil) ; nil = current-buffer where the bbdb-message-cache-lookup is expecting everything to be in the buffer of the message. Emacs : GNU Emacs 19.22.11 of Mon Feb 14 1994 on mom (irix) Package: VM 5.67 (beta) current state: ============== (setq vm-arrived-message-hook nil vm-auto-center-summary 1 vm-auto-folder-case-fold-search nil vm-auto-get-new-mail t vm-auto-next-message t vm-berkeley-mail-compatibility nil vm-check-folder-types t vm-circular-folders 0 vm-confirm-new-folders nil vm-confirm-quit 0 vm-convert-folder-types nil vm-crash-box "~/Vmail/INBOX.CRASH" vm-default-folder-type 'From_ vm-delete-after-archiving t vm-delete-after-bursting nil vm-delete-after-saving nil vm-delete-empty-folders nil vm-digest-burst-type "rfc934" vm-digest-identifier-header-format "X-Digest: %s\n" vm-digest-center-preamble t vm-digest-preamble-format "\"%s\" (%F)" vm-digest-send-type "rfc1153" vm-edit-message-hook nil vm-edit-message-mode 'text-mode vm-flush-interval 30 vm-folder-directory "~/Vmail/" vm-folder-read-only nil vm-follow-summary-cursor t vm-forward-message-hook nil vm-forwarded-headers '("From:" "Sender:" "To:" "Cc:" "Subject:" "Date:" "Message-ID:" "Keywords:" "Newsgroups:") vm-forwarding-digest-type "rfc1153" vm-forwarding-subject-format "forwarded message from %F" vm-highlighted-header-regexp nil vm-honor-page-delimiters nil vm-in-reply-to-format "%i" vm-included-text-attribution-format "%F wrote:\n" vm-included-text-discard-header-regexp nil vm-included-text-headers nil vm-included-text-prefix "" vm-inhibit-startup-message nil vm-init-file "~/.vm" vm-invisible-header-regexp nil vm-jump-to-new-messages t vm-jump-to-unread-messages t vm-keep-crash-boxes "/usr/tmp/gec-crashes" vm-keep-sent-messages t vm-mail-header-from "[EMAIL PROTECTED] (Gardner Cohen)" vm-mail-hook nil vm-mail-mode-hook nil vm-mode-hook nil vm-mode-hooks '(gec-vm-mode-hook) vm-move-after-deleting 0 vm-move-after-undeleting nil vm-move-messages-physically nil vm-movemail-program "mymovemail" vm-mutable-frames nil vm-mutable-windows t vm-pop-md5-program "md5" vm-preview-lines t vm-preview-read-messages nil vm-primary-inbox "~/Vmail/INBOX" vm-quit-hook '((lambda nil (bbdb-save-db)) (lambda nil (bbdb-save-db))) vm-recognize-pop-maildrops "^[^:]+:[^:]+:[^:]+:[^:]+:[^:]+" vm-reply-hook nil vm-reply-ignored-addresses '("gec.*sgi\\.com" "gec.*mti" "^beldar$" "beldar@netcom\\.com") vm-reply-ignored-reply-tos nil vm-reply-subject-prefix nil vm-resend-bounced-discard-header-regexp nil vm-resend-bounced-headers '("Resent-" "From:" "Sender:" "To:" "Cc:" "Subject:" "Newsgroups:" "In-Reply-To:" "References:" "Keywords:" "X-") vm-resend-bounced-message-hook nil vm-resend-discard-header-regexp "\\(\\(X400-\\)?Received:\\|Resent-\\)" vm-resend-headers nil vm-resend-message-hook nil vm-retrieved-spooled-mail-hook nil vm-rfc1153-digest-discard-header-regexp "\\(X400-\\)?Received:" vm-rfc1153-digest-headers '("Resent-" "Date:" "From:" "Sender:" "To:" "Cc:" "Subject:" "Message-ID:" "Keywords:") vm-rfc934-digest-discard-header-regexp nil vm-rfc934-digest-headers '("Resent-" "From:" "Sender:" "To:" "Cc:" "Subject:" "Date:" "Message-ID:" "Keywords:") vm-search-using-regexps nil vm-select-message-hook '(bbdb/vm-update-record hilit-rehighlight-buffer-quietly) vm-select-new-message-hook nil vm-select-unread-message-hook nil vm-send-digest-hook nil vm-skip-deleted-messages t vm-skip-read-messages nil vm-startup-with-summary t vm-strip-reply-headers nil vm-summary-format "%n %*%a %-17.17F %-3.3m %2d %4l/%-5c %I\"%s\"\n" vm-summary-highlight-face nil vm-summary-mode-hook nil vm-summary-mode-hooks nil vm-summary-redo-hook '(hilit-rehighlight-buffer-quietly) vm-summary-show-threads t vm-summary-subject-no-newlines t vm-summary-thread-indent-level 2 vm-summary-uninteresting-senders "gec.*sgi\\.com\\|beldar@.*netcom\\|^beldar$\\|gec.*[Mm]ti" vm-summary-uninteresting-senders-arrow "To: " vm-tale-is-an-idiot nil vm-unforwarded-header-regexp nil vm-virtual-folder-alist '(("replies" (("INBOX" "netcom" "bccs") (and (not (filed)) (or (and (header "^X-Gec-Originated") (author "beldar\\|gec")) (replied))))) ("spores" (("mdove" "peter" "bwc") (any))) ("tools" (("ruthw" "ekoh" "peebles" "flc" "anoosh" "roginski") (any))) ("bccs" (("netcom") (and (not (filed)) (header "^X-Gec-Originated") (author "beldar\\|gec"))))) vm-virtual-mirror t vm-visible-headers '("From:" "Sender:" "To:" "Apparently-To:" "Cc:" "Subject:" "Date:" "Newsgroups") vm-visit-folder-hook nil vm-visit-when-saving 0 vm-window-configuration-file "~/.vm.windows" vm-window-configurations '((vm-visit-folder ((((visibility . t) (window-id . "79699084") (top . 229) (left . 578) (unsplittable) (minibuffer . t) (modeline . t) (width . 90) (height . 50) (name . "VM: stella") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79698556") (top . 154) (left . 143) (unsplittable) (minibuffer) (modeline . t) (width . 80) (height . 14) (name . "COMPILATION") (menu-bar-lines . 0) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal! -border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79697558") (top . 217) (left . 58) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (name . ".vmaliases.el") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79696582") (top . 151) (left . 57) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (name . "vm-window.el") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertica! l-scroll-bars . t) (internal-borde r-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79695560") (top . 197) (left . 637) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (name . "ice_cop0.c") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79692897") (top . 163) (left . 321) (unsplittable) (minibuffer . t) (modeline . t) (width . 90) (height . 50) (name . "VM: netcom") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-! color . "Black") (vertical-scroll- bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79692776") (top . 258) (left . 570) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (name . "EXT.Mkinc") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . icon) (window-id . "79691809") (top . 32) (left . 182) (unsplittable) (minibuffer . t) (modeline . t) (width . 90) (height . 50) (name . "VM") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c! 1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1")) ((visibility . t) (window-id . "79691783") (top . 261) (left . 510) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (name . "t5.settings") (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type . t) (border-color . "black") (cursor-color . "black") (mouse-color . "black") (background-color . "#c1c1c1") (foreground-color . "Black") (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2) (font . "-misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1"))) (((0 1 90 49) ((nil summary)) ((nil nil nil t)))))) (vm-mail ((((visibility . t) (top . 131) (left . 111) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (bord! er-width . 2)) ((visibility . t) ( top . 111) (left . 91) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 163) (left . 257) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 111) (left . 91) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 317) (left . 667) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (! vertical-scroll-bars . t) (interna l-border-width . 2) (border-width . 2))) (((- (0 1 85 9) (0 9 85 33) (0 33 85 39)) ((nil message) (nil composition) (nil "*BBDB*")) ((nil nil nil nil) (nil nil nil t) (nil nil nil nil)))))) (vm-reply-include-text ((((visibility . t) (top . 131) (left . 111) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 111) (left . 91) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 163) (left . 257) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-! border-width . 2) (border-width . 2)) ((visibility . t) (top . 111) (left . 91) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 317) (left . 667) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2))) (((- (0 1 85 9) (0 9 85 34) (0 34 85 39)) ((nil message) (nil composition) (nil "*BBDB*")) ((nil nil nil nil) (nil nil nil t) (nil nil nil nil)))))) (editing-message ((((visibility . t) (top . 52) (left . 172) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2))) (((-! (0 1 80 31) (0 31 80 39)) ((nil e dit) (nil summary)) ((nil nil nil t) (nil nil nil nil)))))) (startup ((((visibility . t) (top . 140) (left . 140) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2))) (((0 1 80 39) ((nil summary)) ((nil nil nil t)))))) (reading-message ((((menu-bar-lines . 0) (unsplittable) (minibuffer . t) (modeline . t) (width . 90) (height . 38) (name . "terminal"))) (((- (0 0 90 26) (0 26 90 29) (0 29 90 37)) ((nil message) (nil "*BBDB*") (nil summary)) ((nil nil nil nil) (nil nil nil nil) (nil nil nil t)))))) (composing-message ((((visibility . t) (top . 131) (left . 111) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) ! (top . 111) (left . 91) (unsplitta ble) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 163) (left . 257) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 111) (left . 91) (unsplittable) (minibuffer . t) (modeline . t) (width . 85) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (internal-border-width . 2) (border-width . 2)) ((visibility . t) (top . 317) (left . 667) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 40) (menu-bar-lines . 1) (cursor-type . box) (auto-lower) (auto-raise) (icon-type) (vertical-scroll-bars . t) (intern! al-border-width . 2) (border-width . 2))) (((- (0 1 85 9) (0 9 85 33) (0 33 85 39)) ((nil message) (nil composition) (nil "*BBDB*")) ((nil nil nil nil) (nil nil nil t) (nil nil nil nil)))))) (vm-summarize ((((menu-bar-lines . 0) (unsplittable) (minibuffer . t) (modeline . t) (width . 80) (height . 41) (name . "terminal"))) (((0 0 80 40) ((nil summary)) ((nil nil nil t))))))) pop-up-windows t pop-up-frames nil next-screen-context-lines 2 features '(etags compile cc-mode dired ange-ftp comint-hilit comint ring rfc822 env man assoc tabify mailabbrev mailalias mail-extr mail-utils itimer bbdb-com bbdb-vm bbdb t byte-optimize byte-compile backquote win-vm sendmail timezone reporter tapestry vm ptools show-temp-buffer compile-frame paren stig-paren hl319 hilit19 func-menu mini-cl cl cl-19 delsel mldrag gnuserv filecomp backslash csh-mode fa-extras filladapt ispell auto-save hyperbole hook-advice advice advice-preload menu-bar faces vc-hooks lisp-float-type lisp-mode page select scroll-bar mouse frame) )