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