[Mew-dist 03606] Re: Mew 1.93b6: mew-config breaks out mew-config-list setting ?
Makoto MATSUSHITA ( まつしたまこと )
matusita at example.com
1998年 1月 31日 (土) 00:45:08 JST
y-koga> いろいろ問題ありそうなので、ちょっと変えてみました。こんなので
y-koga> はどうでしょう? mew-1.93 b12 用です。
これをみながら,ちょっとだけ変えてみました _o_
***
まず,結局何を実装したのかを書いてみます.
- Config に関わる変数たち
mew-config
Config: 行に挿入する値
'guess ならば,mew-config-guess-by-alist (後述)
を用いた推論結果の値となる (推論結果が nil に
なる場合,mew-config-list に書いた先頭の値).
文字列ならば,その値
nil ならば,Config: 行は挿入されない
mew-config-guess-by-alist
mew-config が 'guess の際に用いられる推論規則
mew-config-list
Config: 行での circular completion 候補
先頭の値は mew-config が 'guess の場合に推論が失敗した
時の default value としても用いられる.
mew-config-auto-insert
non-nil の場合,Config: 行の挿入の際,Mew によって決定
された Config: 値を自動的に用いる
mew-ask-config
non-nil の場合,送信時に Config: 行を挿入/変更を尋ねて
もらえる(尋ねられなければ送信時の挿入はできない)
- Config を挿入する関数: mew-draft-insert-config()
変数 mew-config によって決定される値を Config: 行に挿入する
mew-config-auto-insert が non-nil の場合,さらに minibuffer に
て Config: 行で用いる値を利用者に尋ねる.
上記の結果,Config: 行に挿入する値が nil ではない場合,その値
を Config: 行の値として用いる.nil であった場合には何もしない.
また,既に Config: 行があっても無視して上書きする.
Config: 行を挿入した/しなかったは,戻り値で判断できる.
そして,これらが実際にどう使われるかを書いてみます.
- draft 生成時に mew-draft-insert-config() が必ず呼ばれる
Config: が挿入されてもされなくても,挙動は従来と一緒になる
(一般的に body の先頭,To: がなければ To: 行).よって,
* mew-config が nil なら何の影響もなし
* mew-config が non-nil なら Config: 挿入がおきる
* さらに,mew-config-auto-insert が non-nil なら,挿入は自動的
- mew-draft-insert-config() はいつでも呼べる.
特定の値を任意に挿入したいならば,mew-config の値を一時的に
bind してあげれば何でもいれられる.単純に呼ぶだけでも,minibuffer
にて値を明示的に指定できる.
* 候補を mew-config-list に書いておけば補完が可能
* さらに,mew-config-auto-insert が non-nil なら,挿入は自動的
- message 送信時に mew-draft-insert-config() を (setq mew-config 'guess)
の状態で呼ぶことができる
* mew-ask-config を nil にしておけば何も起きない
* 尋ねられた後に y と答えたら挿入が可能
* さらに,mew-config-auto-insert が non-nil なら,挿入は自動的
* 尋ねられた後に n と答えると Config: は消される
***
以下に,pure 1.93b12 から作った diff を添付してみます.こがさんのやつ
をベースにして一部だけいじった格好になってます.
で‥‥結局のところ,
(元の仕様と比べて) Config: を消すタイミングが違う.
(こがさんのやつと比べて) mew-config-auto-insert は
「挿入する時には,尋ねることなく勝手につっこむ」ための変数にし
てしまっている.
というところが大きく違ってます.これで,それなりに最初の仕様を満たせて
いて,かつ,うっとおしそうな所はうっとおしくないように調節できていると
良いのですけれども‥‥
# 特に,mew-draft-insert-config() でいじった部分はかなりださい code に
# なってるはずです.elisp よくわからないので適当にいじってください _o_
mew-draft-insert-config() において,もしある条件を満たすならば,既存の
mail での Config: 行の値を default にするともっと良い気がしたのですが,
その条件を厳密に決め切れなかったので何もしてません.
-- -
Makoto `MAR' MATSUSHITA
--- mew-draft.el.orig Thu Jan 29 13:05:06 1998
+++ mew-draft.el Fri Jan 30 23:39:29 1998
@@ -474,13 +474,10 @@
(setq halist (cdr halist)))
)
(mew-header-insert-here "Mime-Version:" mew-mv:-num)
+ (if (mew-draft-insert-config) (insert "\n"))
(insert mew-header-separator "\n")
- (mew-draft-insert-config)
(mew-draft-refresh)
- (if nl
- (save-excursion
- (re-search-forward mew-eoh2)
- (insert "\n")))
+ (if nl (insert "\n"))
(if to ;; there is no To:
()
(goto-char (point-min))
@@ -530,6 +527,10 @@
(not (y-or-n-p "Do you want to post to NetNews?")))
(mew-header-delete-lines '("Newsgroups:")))
))
+ (if mew-ask-config
+ (if (y-or-n-p "Do you want to use Config:?")
+ (let ((mew-config 'guess)) (mew-draft-insert-config))
+ (mew-header-delete-lines '("Config:"))))
(run-hooks 'mew-send-hook)
(save-excursion
(if (mew-header-get-value mew-ct:)
@@ -851,30 +852,30 @@
(defun mew-draft-insert-config ()
(interactive)
- (if mew-config-auto-insert
- (let ((config-cur (mew-header-get-value "Config:"))
- config-new)
- (cond
- ((equal mew-config 'guess)
- (setq config-new (car (mew-config-guess-by-alist)))
- (or config-new (setq config-new (car mew-config-list))))
- (t
- (setq config-new mew-config))
- )
- (if (and config-new
- (or (not config-cur)
- (and (not (equal config-new config-cur))
- (y-or-n-p
- (format "Do you want to change Config: value to %s?" config-new)))))
- (progn
- (widen)
- (mew-header-delete-lines '("Config:"))
- (goto-char (point-min))
- (re-search-forward mew-eoh2)
- (beginning-of-line)
- (mew-header-insert-here "Config:" config-new)
- (forward-line -1)
- (end-of-line))))))
+ (let ((config-cur (mew-header-get-value "Config:"))
+ (config-new))
+ (cond
+ ((equal mew-config 'guess)
+ (setq config-new (car (mew-config-guess-by-alist)))
+ (or config-new (setq config-new (car mew-config-list))))
+ (t
+ (setq config-new mew-config))
+ )
+ (unless mew-config-auto-insert
+ (setq config-new (mew-input-config config-new)))
+ (if config-new
+ (progn
+ (widen)
+ (mew-header-delete-lines '("Config:"))
+ (goto-char (point-min))
+ (re-search-forward mew-eoh2)
+ (beginning-of-line)
+ (mew-header-insert-here "Config:" config-new)
+ (mew-draft-refresh)
+ (forward-line -1)
+ (end-of-line)
+ config-new)
+ nil)))
(defun mew-draft-insert-signature ()
(interactive)
--- mew-encode.el.orig Thu Jan 29 00:44:48 1998
+++ mew-encode.el Fri Jan 30 22:02:10 1998
@@ -50,7 +50,6 @@
"Make a MIME message. Charset guess, mapping directory structure
to multipart, and so on."
(interactive)
- (mew-draft-insert-config)
(if (mew-header-get-value mew-ct:)
(progn
(ding)
--- mew-minibuf.el.orig Thu Jan 29 00:44:50 1998
+++ mew-minibuf.el Fri Jan 30 22:02:11 1998
@@ -187,6 +187,20 @@
(if (string= type "") default type)
))
+(defun mew-input-config (default)
+ (let ((config))
+ (setq config (completing-read
+ (format "Config value (%s): " default)
+ (mapcar
+ (function
+ (lambda (x) (cons x x)))
+ mew-config-list)
+ nil nil nil))
+ (if (string= config "")
+ default
+ config)
+ ))
+
(provide 'mew-minibuf)
;;; Copyright Notice:
--- mew-vars.el.orig Thu Jan 29 22:44:53 1998
+++ mew-vars.el Fri Jan 30 22:02:11 1998
@@ -635,6 +635,9 @@
(defvar mew-ask-newsgroups nil
"*If non-nil, prompt user if he/she want to include Newsgroups: field")
+(defvar mew-ask-config nil
+ "*If non-nil, prompt user if he/she want to include/change Config: field")
+
;;
;; Field Magic
;;
Mew-dist メーリングリストの案内