[Mew-dist 07524] fixed form insertion

OBATA Noboru obata at example.com
1999年 2月 18日 (木) 19:22:49 JST


小幡です。

メールを書く際 (新規あるいは返信時) に、定型文書を挿入する elisp
を書きましたので contrib します。

以前に「定型メールの作り方」という質問がありました ([Mew-dist
05071])。そのときは、mew-cite-format の先頭に入れる、署名の頭に
入れればよい、c-sig を使えば宛先によって署名ファイルを切り替えら
れる、といった回答が寄せられました。

やりたいことは基本的にこれと同じで、To: やその他の条件から推測し
て適切な定型文書を挿入するというものです。elisp を勉強中で、何か
書いてみたいと思いながら mew のコードを眺めていたところ 
mew-refile-guess-by-alist1 という関数を見て、これを使えばできそ
うだと感じたのが書いた動機です。

使い方は、添付の mew-ff.el を load-path の通ったディレクトリに置
いて、.emacs に例えば次のように書きます。

(require 'mew-ff)
(setq mew-ff-guess-alist
      '(("To:"
         ("mew-dist at example.com" . "~/.ff-mew-dist")
        )))
(add-hook 'mew-before-cite-hook 'mew-ff)

ここで "~/.ff-mew-dist" は定型文を入れたファイル名です。

また日付文字列を挿入することもできます。僕の場合、上の設定に加え

(defun my-date-string ()
  (interactive)
  (let* ((dt (decode-time))
         (yy (nth 5 dt))
         (mm (nth 4 dt))
         (dd (nth 3 dt))
         (day (nth (nth 6 dt)
                   '("日" "月" "火" "水" "木" "金" "土"))))
    (format "%d年 %d月 %d日(%s)" yy mm dd day)))
(setq mew-ff-insert-date t)
(setq mew-ff-date-func 'my-date-string)

と書いています。こうすることで

---- ここから
                                             1999年 2月 18日(木)
○○株式会社
○○部 ○○課
○○ ○○ 様
                                    日本コントロールシステム(株)
                                                         小幡 昇
いつもお世話になっております。

---- ここまで

のような日付入りの定型文を挿入できます。(結局はこれがやりたい)

使用感をお寄せ頂けると幸いです。(elisp は初めてなので、elisp の
書き方へのコメントも歓迎です)

P.S.

本当は mew-ff-insert-date の情報も guess させたいのですが、スマー
トな方法が思い当たりません。

-- 
小幡 昇 (obata at example.com)
-------------- next part --------------
;;; mew-ff.el --- Fixed form insertion for Mew

;; Author:  OBATA Noboru <obata at example.com>
;; Created: Feb 18, 1999

(defvar mew-ff-guess-alist nil
  "*定型文書ファイル名を推測するための連想リスト。
書式は \"mew-refile-guess-alist\" と同じ。")

(defvar mew-ff-insert-date nil
  "*定型文書の前に日付文字列を挿入するかどうか。")

(defvar mew-ff-date-func 'current-time-string
  "*日付文字列を生成する関数。")

(defun mew-ff ()
  "メッセージの先頭に定型文書を挿入する。"
  (interactive)
  (let ((file (car (mew-refile-guess-by-alist1 mew-ff-guess-alist))))
    (if file
        (let ((efile (expand-file-name file)))
          (if (not (file-exists-p efile))
              (message "No fixed from file %s" efile)
            (progn
              (goto-char (mew-header-end))
              (forward-line)
              (if mew-ff-insert-date
                  (mew-insert (format "%%%ds\n" fill-column)
                              (funcall mew-ff-date-func))))
              (let ((current (point))
                    (size (car (cdr (insert-file-contents efile)))))
                (goto-char (+ current size))))
            ))))

(provide 'mew-ff)

;;; mew-ff.el ends here


Mew-dist メーリングリストの案内