[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 メーリングリストの案内