Here's a patch against CVS head for a split fancy function:

  "Search for bbdb records with addresses in the address-class (as per
  bbdb-get-addresses-headers) of the message and who have bbdb-field
  in their bbdb record.  fancy Return splits for each matching record
  with the bbdb-field.  If the bbdb-field for that record contains
  something that looks like an s-expression, it is read and returned
  as an s-expression to be used as a split.

  For example to reproduct bbdb/gnus-split-method's behavior put the
  following in your .emacs:

  (setq nnmail-split-fancy
   '(| (: bbdb/gnus-split-fancy 'gnus-public 'recipients)
       (: bbdb/gnus-split-fancy 'gnus-private 'authors)))"

cvs diff: Diffing lisp
Index: lisp/bbdb-com.el
===================================================================
RCS file: /cvsroot/bbdb/bbdb/lisp/bbdb-com.el,v
retrieving revision 1.174
diff -r1.174 bbdb-com.el
3616a3617,3650
> (defun bbdb-get-records-for-message
>   (only-first-address
>    uninteresting-senders
>    get-header-content-function 
>    &optional address-class
>    &rest get-header-content-function-args) 
>   "Returns the bbdb records corresponding to the addresses in the
>   mesage headers possibly limited to certain headers by
>   address-class."
>   (let ((bbdb-get-addresses-headers
>        (if address-class
>            (list (assoc address-class bbdb-get-addresses-headers))
>          bbdb-get-addresses-headers))
>       ;; there is no case for nets
>       (bbdb-case-fold-search t)
>       (bbdb-records (bbdb-records)))
>     (bbdb-get-records-for-addresses
>      (apply 'bbdb-get-addresses
>           only-first-address
>           uninteresting-senders
>           get-header-content-function
>           get-header-content-function-args))))
> 
> (defun bbdb-get-records-for-addresses (addrs)
>   "Recursively assemble records for the given addresses."
>   (if addrs
>       (append
>        (let ((net (concat "^"
>                         (regexp-quote
>                          (cadr (caddr (car addrs))))
>                         "$")))
>        (bbdb-search bbdb-records nil nil net))
>        (bbdb-get-records-for-addresses (cdr addrs)))))
> 
cvs diff: cannot remove temp file /tmp/cvshRTLlW: Operation not permitted
Index: lisp/bbdb-gnus.el
===================================================================
RCS file: /cvsroot/bbdb/bbdb/lisp/bbdb-gnus.el,v
retrieving revision 1.99
diff -r1.99 bbdb-gnus.el
696a697,733
> (defun bbdb/gnus-split-fancy (bbdb-field
>                                    &optional address-class)
>   "Search for bbdb records with addresses in the address-class (as per
>   bbdb-get-addresses-headers) of the message and who have bbdb-field
>   in their bbdb record.  fancy Return splits for each matching record
>   with the bbdb-field.  If the bbdb-field for that record contains
>   something that looks like an s-expression, it is read and returned
>   as an s-expression to be used as a split.
> 
>   For example to reproduct bbdb/gnus-split-method's behavior put the
>   following in your .emacs:
> 
>   (setq nnmail-split-fancy
>    '(| (: bbdb/gnus-split-fancy 'gnus-public 'recipients)
>        (: bbdb/gnus-split-fancy 'gnus-private 'authors)))"
>   (cons
>    '&
>    (bbdb/gnus-get-splits-for-records
>     bbdb-field
>     (bbdb-get-records-for-message
>      bbdb-get-only-first-address-p
>      (or (if (boundp 'gnus-ignored-from-addresses)
>            gnus-ignored-from-addresses)
>        bbdb-user-mail-names)
>      'gnus-fetch-field
>      address-class))))
> 
> (defun bbdb/gnus-get-splits-for-records (bbdb-field records)
>   "Recursively retrieve splits from BBDB records."
>   (if records
>       (cons
>        (let* ((field (bbdb-record-getprop (car records) bbdb-field))
>             (sexp (if field (read field))))
>        (if (symbolp sexp) field sexp))
>        (bbdb/gnus-get-splits-for-records bbdb-field
>                                        (cdr records)))))
> 
cvs diff: cannot remove temp file /tmp/cvsJsj2qP: Operation not permitted
Hope someone likes this,
Ross Patterson

Reply via email to