[Mew-dist 07528] Re: fixed form insertion

Shun-ichi GOTO gotoh at example.com
1999年 2月 18日 (木) 20:45:14 JST


後藤@太陽計測です

>>>>> at Thu, 18 Feb 1999 19:22:49 +0900
>>>>> 小幡 <obata at example.com> said,

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

おもしろいですね。(^^;


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

guessするというのは必ずしも現実的なのかどうかは別として、アイディアを1つ。

現在、dateの挿入は固定で行なわれていますが、formをtemplateとして考え、
キーワードを置きかえる処理を定義できるようにしてみてはいかがでしょうか。
例えばこんなかんじで。

#これはわたしが autoinsert と併用して、新規ファイルの自動作成に使って
#いるものの一部転用です。


(defvar mew-ff-replace-keywards-alist
  ;; for example
  '(("DATE" . current-time-string)
    ("FILENAME" . (lambda () (file-name-nondirectory (buffer-file-name))))
    ("AUTHOR" . "Shun-ichi GOTO")
    ("MAILADDR" . "gotoh at example.com")
    ))

(defun mew-ff-replace-keywards (&optional beg end)
  (interactive "r")
  (let (b e kw obj str)
    (save-excursion
      (goto-char beg)
      (while (re-search-forward "@@\\([-_:a-zA-Z0-9]+\\)@@" end t)
	(setq kw (buffer-substring (match-beginning 1) (match-end 1))
	      obj (cdr (assoc kw mew-ff-replace-keywards-alist))
	      str (cond
		   ((null obj) nil)
		   ((stringp obj) obj)
		   ((functionp obj) (funcall obj))
		   ((symbolp obj)
		    (if (fboundp obj) (funcall obj)
		      (if (and (boundp obj)
			       (stringp (symbol-value obj)))
			  (symbol-value obj))))))
	(if (and str (stringp str))
	    (replace-match str t t))))))


上記コードは、例えば@@FILENAME@@などという、@@で囲まれたキーワードを埋
め込んでおくと、それをalistから探して自動的に置き換えるものです。alist
に定義するのは関数でも変数でも文字列でもlambda式でも良いです。文字列で
あればそのまま置き換え、関数であれば呼び出した結果の文字列を使います。

mew-ff の中でformをinsertした後の適当なタイミングで 呼び出してあげると
面白いのでは?


さらに。。。

これにguessの考えを加えてみるならば、例えば現在の mew-ff-guess-alist
の書式を以下のようにしてみることで可能かも。
#上記コードはそうなっていませんが。。。

(("To" ("mew-dist"      "~/form/mew-dist" ("DATE" . date-format1)
                                          ("FROM" . from-format1))
       ("foo at example.com" "~/form/foo"      ("DATE" . date-format2))
  ))

#そのときは mew-ff-replace-keywards-alist は defaultとして使うかな


なんてアイディア、いかがでしょうか。

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN




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