[Mew-dist 259] BBDB for mew-cite
神田大輔 [Daisuke Kanda]
small at example.com
1996年 12月 8日 (日) 04:10:03 JST
神田@筑波大です。
引用のときの名前に BBDB を使うようにしてみました。
以前流れた、小林@JAIST さんの設定に加えて、このメールについているパ
ッチを各ソースに当てます。
(setq mew-use-bbdb t)
(setq mew-cite-bbdb-fields '("cite" "lastname" "firstname"))
引用時の、mew-cite-field での "From:"、mew-cite-prefix-username の名前を
From: フィールドから得られるデータを用いて書き換えます。
使う変数は次の二つ。
mew-use-bbdb
bbdb を使うかの設定。
mew-cite-bbdb-fields
BBDB のどのフィールドを用いるかの設定。
mew-cite-bbdb-fields は、ストリングのリストです。左から順にデータのあ
るフィールドを使います。nil のときは
(setq mew-cite-bbdb-fields '("cite" "lastname" "firstname"))
と同じです。
Lisp は授業で10週 Scheme やっただけ。ちゃんと動くかな…。
MIME メールも初めてです。ちゃんと送れるかな…。
筑波大学自然学類三年次神田大輔
e-mail: small at example.com
WWW: http://www.first.tsukuba.ac.jp/~small
PGP fingerprint:09 35 5B 57 5B B7 C8 8B 9C 87 7C 57 8F 2F BE 8B
-------------- next part --------------
*** mew.el.org Sun Dec 8 03:22:55 1996
--- mew.el Sun Dec 8 03:22:34 1996
***************
*** 197,211 ****
(defvar mew-cite-hook nil
"*If you want to use super-cite, (setq mew-cite-hook 'sc-cite-original).")
(defvar mew-cite-prefix-function nil)
;(defvar mew-cite-prefix-function 'mew-cite-prefix-username)
(defvar mew-cite-prefix-confirmp nil)
(defun mew-cite-prefix-username ()
! (format "%s> " (mew-header-delete-at
! (mew-header-extract-addr
! (mew-header-get-value "From:"))))
! )
(defvar mew-cite-fields '("From:" "Subject:" "Date:")
"*The fields that you want to extract as citation label.
--- 197,220 ----
(defvar mew-cite-hook nil
"*If you want to use super-cite, (setq mew-cite-hook 'sc-cite-original).")
+ (defvar mew-cite-bbdb-fields nil)
+
(defvar mew-cite-prefix-function nil)
;(defvar mew-cite-prefix-function 'mew-cite-prefix-username)
(defvar mew-cite-prefix-confirmp nil)
(defun mew-cite-prefix-username ()
! (if (null mew-use-bbdb)
! (format "%s> " (mew-header-delete-at
! (mew-header-extract-addr
! (mew-header-get-value "From:"))))
! (let (bbdbfieldlist)
! (if (null mew-cite-bbdb-fields)
! (setq bbdbfieldlist '("cite" "lastname" "firstname"))
! (setq bbdbfieldlist mew-cite-bbdb-fields))
! (format "%s> "
! (mew-header-delete-at
! (mew-header-get-value-wrapper "From:" bbdbfieldlist))))))
(defvar mew-cite-fields '("From:" "Subject:" "Date:")
"*The fields that you want to extract as citation label.
-------------- next part --------------
*** mew-header.el.org Sun Dec 8 03:22:55 1996
--- mew-header.el Sun Dec 8 03:22:34 1996
***************
*** 13,18 ****
--- 13,19 ----
(defconst mew-header-version "mew-header.el version 0.04")
(require 'mew)
+ (require 'bbdb)
(defvar mew-header-max-depth 20
"*A value to decide loop depth for header field syntax analysis.
***************
*** 55,61 ****
)))
ret
))
!
(defun mew-header-get-line (field)
;; return with ^J
;; currently, when no match, it returns nil.
--- 56,73 ----
)))
ret
))
!
! ;
! ; if field equals "From:", change getting value using by BBDB
! ;
! (defun mew-header-get-value-wrapper (field &optional parselist)
! (let
! ((value (mew-header-get-value field)))
! (if (or (null value) (not (string= "From:" field)))
! value
! (if (null parselist) (setq parselist '("lastname" "firstname")))
! (bbdb-net-parse (mew-header-extract-addr value) parselist))))
!
(defun mew-header-get-line (field)
;; return with ^J
;; currently, when no match, it returns nil.
-------------- next part --------------
*** mew-draft.el.org Sun Dec 8 03:22:55 1996
--- mew-draft.el Sun Dec 8 03:22:34 1996
***************
*** 636,645 ****
))
(defun mew-cite-strings ()
! (let ((fields (mapcar (function mew-header-get-value) mew-cite-fields)))
! (setq fields (mapcar (function (lambda (x) (if (null x) "" x))) fields))
! (apply (function format) mew-cite-format fields)
! ))
(defun mew-draft-cite (&optional arg)
(interactive "P")
--- 636,657 ----
))
(defun mew-cite-strings ()
! (if (null mew-use-bbdb)
! (let ((fields (mapcar (function mew-header-get-value) mew-cite-fields)))
! (setq fields (mapcar (function (lambda (x) (if (null x) "" x))) fields))
! (apply (function format) mew-cite-format fields)
! )
! (let (fields bbdbfieldlist)
! (if (null mew-cite-bbdb-fields)
! (setq bbdbfieldlist '("cite" "lastname" "firstname"))
! (setq bbdbfieldlist mew-cite-bbdb-fields))
! (setq fields (mapcar
! (function (lambda (x)
! (mew-header-get-value-wrapper x bbdbfieldlist)))
! mew-cite-fields))
! (setq fields (mapcar (function (lambda (x) (if (null x) "" x))) fields))
! (apply (function format) mew-cite-format fields))))
!
(defun mew-draft-cite (&optional arg)
(interactive "P")
-------------- next part --------------
*** bbdb-com.el.org Sun Dec 8 03:06:50 1996
--- bbdb-com.el Sun Dec 8 03:06:39 1996
***************
*** 130,135 ****
--- 130,181 ----
(setq records (cdr records)))
(nreverse matches)))))
+ ; ----------------------------------------------------------------
+ ; for getting value
+
+ ;
+ ; this is not well, please modify it.
+ ;
+ ;(defun bbdb-record-field (field record)
+ ; (if (memq (intern field)
+ ; '(firstname lastname aka company phones
+ ; addresses net raw-notes cache))
+ ; (let (f)
+ ; (fset 'f (intern (concat "bbdb-record-" field)))
+ ; (f record))
+ ; (if (consp (bbdb-record-raw-notes record))
+ ; (cdr (assq (intern field) (bbdb-record-raw-notes record)))
+ ; nil)))
+
+ (defun bbdb-record-field (field record)
+ (cond
+ ((string= field "firstname") (bbdb-record-firstname record))
+ ((string= field "lastname") (bbdb-record-lastname record))
+ ((string= field "aka") (bbdb-record-aka record))
+ ((string= field "company") (bbdb-record-company record))
+ ((string= field "phones") (bbdb-record-phones record))
+ ((string= field "addresses") (bbdb-record-addresses record))
+ ((string= field "net") (bbdb-record-net record))
+ ((string= field "raw-notes") (bbdb-record-raw-notes record))
+ ((string= field "cache") (bbdb-record-coche record))
+ (t
+ (if (consp (bbdb-record-raw-notes record))
+ (cdr (assq (intern field) (bbdb-record-raw-notes record)))
+ nil))))
+
+ (defun bbdb-net-parse (net fields)
+ (let
+ (value
+ (record (car (bbdb-search (bbdb-records) nil nil net))))
+ (if (null record)
+ net
+ (while (and fields (null value))
+ (setq value (bbdb-record-field (car fields) record))
+ (setq fields (cdr fields)))
+ (if (null value) net value))))
+ ; ----------------------------------------------------------------
+
+
(defun bbdb (string elidep)
"Display all entries in the BBDB matching the regexp STRING
Mew-dist メーリングリストの案内