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