-*- 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 が必要 (T-gnus では FLIM 1.14 が必要) です。 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) ;; T-gnus 6.15.5 以上では不要です。 ;(eval-after-load "message" ; '(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-com.el、bbdb-hooks.el および bbdb.el にあてる patch です。 ------ cut here ------ cut here ------ cut here ------ cut here ------ --- bbdb-2.34/lisp/bbdb-com.el~ Tue Jan 15 23:00:57 2002 +++ bbdb-2.34/lisp/bbdb-com.el Thu Jan 31 03:55:01 2002 @@ -1686,7 +1686,7 @@ ;; to be enclosed in quotes. Double-quotes and backslashes have ;; already been escaped. This quotes a few extra characters as ;; well (!,%, and $) just for common sense. - ((string-match "[][\000-\037\177()<>@,;:.!$%]" name) + ((string-match "[][\000-\037\177<>@,;.!$%]" name) (format "\"%s\" <%s>" name net)) (t (format "%s <%s>" name net))))) --- bbdb-2.34/lisp/bbdb-hooks.el~ Tue Jan 15 09:00:11 2002 +++ bbdb-2.34/lisp/bbdb-hooks.el Thu Jan 31 03:55:01 2002 @@ -36,4 +36,6 @@ ;; +(eval-when-compile (require 'cl)) + (require 'bbdb) (require 'bbdb-com) @@ -405,13 +407,23 @@ ignore field pairs fieldval ; do all bindings here for speed regexp string notes-field-name notes - replace-p) + replace-p extract-field-value-funtion) (set-buffer (marker-buffer marker)) (save-restriction - (widen) - (goto-char marker) - (if (and (setq fieldval (bbdb-extract-field-value "From")) - (string-match (bbdb-user-mail-names) fieldval)) + (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 ;; will be of the recipient of the message if it is from us. @@ -421,7 +433,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) @@ -434,7 +446,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 ;; we perform the auto notes stuff only for authors of a message ;; or if explicitly requested --- bbdb-2.34/lisp/bbdb.el~ Tue Jan 15 23:00:58 2002 +++ bbdb-2.34/lisp/bbdb.el Thu Jan 31 03:55:01 2002 @@ -737,6 +737,7 @@ (defvar bbdb-showing-changed-ones nil) (defvar bbdb-modified-p nil) (defvar bbdb-address-print-formatting-alist) ; "bbdb-print" +(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' での記述方法と同じものです。