-*- mode: text; fill-column: 70; -*-

---
BBDB を使用されている方は、 bbdb-gnus.elc を Semi-gnus 6.8.X 以前のも
のと共有することはできません。必ず、 byte-compile し直してください。

;; gnus を起動したあとで、 bbdb-gnus.el のみを byte-compile するという
;; のがお手軽です。 :-)

---
gnus-bbdb.el

Semi-gnus に特化した BBDB API モジュールです。このモジュールを使用する
ことによって、 Semi-gnus で使用する場合には mime-bbdb が不要になります。

1.11.3 以降の FLIM が必要です。

bbdb-auto-notes-hook を使用していない方には不要ですが、使用している方
は bbdb.el / bbdb-hooks.el にこのファイルの最後にある patch をあてる必
要があります。

設定例:

;; mime-bbdb に関する設定は不要です。
;(setq mime-bbdb/use-mail-extr nil)
;(eval-after-load "mail-extr" '(require 'mime-bbdb))

(require 'bbdb)
(require 'gnus-bbdb)
(bbdb-initialize 'sc)  ;; 'gnus / 'Gnus ははずしてください。
(add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
(add-hook 'message-setup-hook 'gnus-bbdb-insinuate-message)

FLIM では quote された eword encoded word は decode されませんが、それ
を強制的に decode したい場合には、次の設定を加えてください。

(setq gnus-bbdb/decode-field-body-function
      (function
       (lambda (field-body field-name)
         (eword-decode-string field-body))))

---
以下は bbdb.el / bbdb-hooks.el にあてる patch です。

------ cut here ------ cut here ------ cut here ------ cut here ------
--- bbdb-2.2/lisp/bbdb-hooks.el~	Mon Jan  8 12:35:14 2001
+++ bbdb-2.2/lisp/bbdb-hooks.el	Tue Feb  6 04:35:00 2001
@@ -411,12 +411,23 @@
          (marker (bbdb-header-start))
          field pairs fieldval  ; do all bindings here for speed
          regexp string notes-field-name notes
-         replace-p replace-or-add-msg)
+         replace-p replace-or-add-msg
+	 extract-field-value-funtion)
     (set-buffer (marker-buffer marker))
     (save-restriction
-      (widen)
-      (goto-char marker)
-      (if (and (setq fieldval (bbdb-extract-field-value "From"))
+      (let ((function-list bbdb-extract-field-value-function-list)
+	    function)
+	(or (progn
+	      (while (and (not extract-field-value-funtion)
+			  (setq function (car function-list)))
+		(setq extract-field-value-funtion (funcall function)
+		      function-list (cdr function-list)))
+	      extract-field-value-funtion)
+	    (progn
+	      (widen)
+	      (goto-char marker)
+	      (setq extract-field-value-funtion 'bbdb-extract-field-value))))
+      (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
                (string-match (bbdb-user-mail-names) fieldval))
           ;; Don't do anything if this message is from us.  Note that we have
           ;; to look at the message instead of the record, because the record
@@ -427,7 +438,7 @@
           (goto-char marker)
           (setq field (car (car ignore-all))
                 regexp (cdr (car ignore-all))
-                fieldval (bbdb-extract-field-value field))
+                fieldval (funcall extract-field-value-funtion field))
           (if (and fieldval
                    (string-match regexp fieldval))
               (setq ignore t)
@@ -440,7 +451,8 @@
                 pairs (cdr (car rest))  ; (REGEXP . STRING) or
                                         ; (REGEXP FIELD-NAME STRING) or
                                         ; (REGEXP FIELD-NAME STRING REPLACE-P)
-                fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
+                fieldval (funcall extract-field-value-funtion field))
+                                        ; e.g., Subject line
           (when fieldval
             (while pairs
               (setq regexp (car (car pairs))
--- bbdb-2.2/lisp/bbdb.el~	Wed Jan 24 23:14:00 2001
+++ bbdb-2.2/lisp/bbdb.el	Tue Feb  6 04:35:00 2001
@@ -681,6 +681,7 @@
 (defvar bbdb-showing-changed-ones nil)
 (defvar bbdb-modified-p nil)
 (defvar bbdb-elided-display nil)
+(defvar bbdb-extract-field-value-function-list nil)
 
 (defvar bbdb-debug t)
 (defmacro bbdb-debug (&rest body)
------ cut here ------ cut here ------ cut here ------ cut here ------

---
gnus-bbdb/split-mail()

nnmail-split-fancy で使用するための関数です。次のように使用してください。

(setq nnmail-split-methods 'nnmail-split-fancy
      nnmail-split-fancy
      '(|
        .....
*1      (: gnus-bbdb/split-mail "from\\|to\\|cc"
           'company "foo" "foo-group") 
        .....
*2      (: gnus-bbdb/split-mail "from\\|to\\|cc" 'company "^bar")
        .....
*3      (: gnus-bbdb/split-mail "from\\|to\\|cc" 'group)
        .....
*4      (: gnus-bbdb/split-mail "from\\|to\\|cc" 'note "my friend"
          '(|
             .....
        .....
        ))

*1 : From, To, Cc いずれかのヘッダー・フィールドに含まれるメイル・アド
     レスのうち BBDB の `company' フィールドに `foo' が含まれる場合、
     `foo-group' に振り分けます。

*2 : `company' フィールドが `bar' で始まっている場合、`company' フィー
     ルドの内容をそのままグループ名として使用し、振り分けます。

*3 : `group' フィールドがある場合、`group' フィールドの内容をそのまま
     グループ名として使用し、振り分けます。

*4 : `note' フィールドに `my friend' が含まれる場合、その後ろに指定さ
     れた規則で振り分けます。この規則の記述方法は、通常の
     `nnmail-split-fancy' での記述方法と同じものです。
