[Mew-dist 13579] mew-config-alist new spec (was: b45)

Shun-ichi GOTO gotoh at example.com
2000年 7月 10日 (月) 17:35:23 JST


>>>>> at Sat, 8 Jul 2000 20:32:57 +0900
>>>>> kazu == Kazu Yamamoto (山本和彦) <kazu at example.com> said,

kazu> だいぶん安全になった b45 をリリースします。

mew-config-alist に関して。

以前も話題にあげましたように、config によって特定のヘッダフィールドを
加えたり削除したりしたいという要望があります。
例えばML宛の場合は confog: ml とする事で、Dcc: を削除する、とかです。

しかし現状では 削除する手段がありませんのでこの機能を追加してみました。
mew-config-alist にて ("dcc" . nil) と表現する事で『値なし』すなわち
意図的な削除となります。

また、CDR値は現在はstring だけが許されていますが、変数の内容や関数結果が
使いたいとも思うので、その拡張も一緒に行なっています。

ルールはそれほど複雑になっていないと思うので御検討下さい。


[[ mew-header-replace-value の拡張仕様 ]]

mew-config-alist の各要素は config 毎の設定を保持し、そのCDR は
再度alist を構成し、その各要素はuser 名やヘッダフィールドとその『値』
となります。従来はこの『値』は文字列だけが許されていましたが、
本拡張では以下のいずれかが指定可能です。

* 文字列   ... 従来通り
* nil      ... その要素を削除する
* シンボル ... 変数として扱い、その値を使用する
* リスト   ... リストの先頭要素が文字列であれば、リストは format に渡す
	       文字列とその引数であると解釈し、リストの先頭にシンボル
	       format を付加し、それをform として扱う。
	       先頭要素が文字列でなければ、それをそのままform として扱う。

これらをeval して『値』となる文字列を作ります。
エラーが発生した場合はエラーを示す文字列を生成します。

例として、dcc の値をいろいろ替えた場合を示す。

("dcc" . "gotoh at example.com")
=> Dcc: gotoh at example.com

("dcc" . nil)
===> (Dcc: は削除される)

("dcc" . mew-smtp-server)
=> Dcc: mail.taiyo.co.jp

("dcc" . ("pop server is %s" mew-smtp-server))
=> Dcc: pop server is mail.taiyo.co.jp

("dcc" . (current-time-string))
=> Dcc: Mon Jul 10 17:24:16 2000

("dcc" . undefined-value)
=> Dcc: *** ERROR: void-variable: undefined-value ***

("dcc" . (car))
=> Dcc: *** ERROR: wrong-number-of-arguments: #<subr car> ***

などです。


P.S.
これは実は、config にて任意のフィールドを挿入できるようにしたい
伏線でもあるのですが、まだちょっとheader-alist の関係とかを理解してない...

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

-------------- next part --------------
Index: mew-header.el
===================================================================
RCS file: /Master/mew-1.95/mew-header.el,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 mew-header.el
--- mew-header.el	2000/07/01 05:37:00	1.1.1.2
+++ mew-header.el	2000/07/10 08:35:14
@@ -72,15 +72,28 @@
       (save-restriction
 	(narrow-to-region (point-min) (point))
 	(goto-char (point-min))
+	;; make value with evalueating
+	(if (and (listp value)
+		 (stringp (car value)))
+	    (setq value (cons 'format value)))
+	(setq value 
+	      (condition-case e
+		  (eval value)
+		(error 
+		 (format "*** ERROR: %s: %s ***" (car e) (car (cdr e))))))
+	(if (not (or (stringp value)
+		     (null value)))
+	    (setq value (format "%s" value)))
+	;; at this time, value is string or nil
 	(cond
 	 ((re-search-forward regex nil t)
-	  (setq start (match-end 0))
+	  (setq start (match-beginning 0))
 	  (forward-line)
 	  (mew-header-goto-next)
-	  (forward-char -1)
 	  (delete-region start (point))
-	  (insert value))
-	 (t
+	  (if value
+	      (mew-draft-header-insert field value)))
+	 (value				; insert when value is exist
 	  (mew-header-goto-end)
 	  (mew-draft-header-insert field value)))))))
 


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