村田です
emcws-bugs から xemacs-beta-ja へ移動しました。
minibuffer を分離していた場合の,its-egg に関する話題です。
>> In the ML [emcws-bugs 317]
>> Katsumi Yamaoka wrote:
1. toroku-region で品詞や活用を minibuffer (*) で選択した後で、元の
frame に戻れない。
2. Wnn の edit-dict-item または SJ3 の edit-dict で複数の登録語を
delete するときに、2 個目以降で minibuffer に focus しないため
"いいですか?(yes/no) " の問いに答えられない。
1. については村田さんの save-selected-window を使う案で解決済みです。
これでもいいですし,山田さんが流された menu のパッチ(XEmacs でも使えるよ
うに修正したもの)を使っても大丈夫です。
2. の方はさんざん試行錯誤を行なった結果、曲がりなりにも minibuffer に
focus させることができるようになりました。わかったことは、minibuffer
で入力する前に bury-buffer, sleep-for または sit-for などの特定の関数
を使うと問題の現象が現れるということです。残念ながらぼくの拙い知恵では
XEmacs の内部で何が起っているのかわかりませんが。むしろ、初めにぼくは
これらの関数が正しい focus を得るのに有効なのではないかと思いましたが、
逆の結果になりました。
これをヒントに調べてみましたが,どうやら event-stream.c:
(next_event_internal) での
if (!focus_follows_mouse)
investigate_frame_change ();
(focus_follows_mouse のデフォルトは nil)
がポイントではないかと思います。少なくとも sleep-for と sit-for ではこの
investigate_frame_change が呼ばれるかどうかで focus が変わるようです(私の
環境では bury-buffer の実行有無は関係なかったです)。
そこで,私の環境(Wnn6 の edit-dict-item)では以下のように
focus_follows_mouse を一時的に t に設定することで,minibuffer への入力がで
きるようになりましたが,SJ3 の edit-dict でも同じでしょうか。
--- egg.el 1999/06/19 00:40:47 1.3
+++ egg.el 1999/06/26 02:52:23
@@ -280,7 +280,8 @@
(defun notify-internal (message &optional noerase)
(save-excursion
- (let ((notify-buff (get-buffer-create *notification-window*)))
+ (let ((notify-buff (get-buffer-create *notification-window*))
+ (focus-follows-mouse t))
(set-buffer notify-buff)
(goto-char (point-max))
(setq buffer-read-only nil)
でも本質的な解決になっていない気もするので,一応,これの副作用や
(let ((focus-follows-mouse t)) する場所を考える必要があると思いますが。
;; WindowManagerの設定に左右されそうな気もしますし。
というのも,<28n1xpkcyd.fsf(a)kchisa.ga.sony.co.jp> での pop-to-buffer は
focus-follows-mouse では解決できないようですので。
--
村田 全寛 / MURATA Masahiro