[Mew-dist 3242] Re: Emacs displays my pop password on minibuffer
Kazu Yamamoto ( 山本和彦 )
Kazu at example.com
1997年 12月 22日 (月) 16:29:08 JST
From: Motohiko Minakuchi <mina at example.com>
Subject: [Mew-dist 3204] Emacs displays my pop password on minibuffer
Date: Tue, 16 Dec 1997 19:42:13 +0900 (JST)
> そのとき、mew-summary-get が完了した直後に「Emacsのヘルプ」
> を起動するとミニバッファに
> 「p a s s w d RET C-h (Type ? for further options)」
> という内容が表示されてしまいますます。
> 上記の「p a s s w d」の部分に、直前に入力したパスワードが
> 1桁おきに表示されるのです。
このバグは昔報告されていましたが、再現できなかったのでそのままでした。
(motonori さんは、再現できたらしいので、詳しく聞こうと思っていたけど、
忘れていました。)
今回めでたく再現できましたので、必死の追跡を敢行したしたところ、おそら
く read-char のバグであろうという結論に至りました。(Emacs を C レベル
で追うのは、泣きそうです。)
パスワードに必要だと説得しても、どうせ Stallman は聞く耳を持たないでしょ
うから、read-char を直すのはあきらめて、read-key-sequence を使うことに
しました。
reset-this-command-lengths が Emacs 20 から提供されているところをみる
と、やはり Emacs 19 のキー入力の echo まわりは buggy のようです。
パッチを作るのがめんどうなので、ソースを送ります。想像できるように、
Emacs 19 では、まだ RET (パスワードの最後の文字)が echo されますが、
reset-this-command-lengths が提供されていないのでしょうがありません。
とりあえず、幸せになれるのではないかと思います。
P.S.
今年のクリスマスプレゼントは、MagicPoint にすると決めました。よって、
次の Mew の stable バージョンを長靴に入れてまわる余裕はないように思い
ます。(マニュアル書かなきゃ。)
(defun mew-read-passwd (prompt)
(let ((pass)
(c 0)
(echo-keystrokes 0)
(ociea cursor-in-echo-area)
(inhibit-input-event-recording t))
(unwind-protect
(progn
(setq cursor-in-echo-area 1)
(while (and (/= c ?\r) (/= c ?\n) (/= c ?\e) (/= c 7)) ;; ^G
(message "%s%s"
prompt
(make-string (length pass) ?.))
;; Since read-char is buggy, password is echoed if
;; type C-u. So, use read-key-sequence instead.
(if (fboundp (function event-to-character))
(setq c (event-to-character (aref (read-key-sequence nil nil) 0)))
(setq c (string-to-char (read-key-sequence nil nil))))
(if (char-equal c ?\C-u)
(setq pass "")
(if (and (/= c ?\b) (/= c ?\177))
(setq pass (concat pass (char-to-string c)))
(if (> (length pass) 0)
(setq pass (substring pass 0 -1))))))
(setq cursor-in-echo-area -1)
)
(setq cursor-in-echo-area ociea)
nil)
(message "")
(sit-for 0)
;; this deletes the last "RET".
(if (fboundp (function reset-this-command-lengths))
(reset-this-command-lengths))
(substring pass 0 -1)
))
--かず
Mew-dist メーリングリストの案内