minibuffer だけの frame を一つ作って、他の普通の frame には minibuffer
が無い使い方をする場合について、お知恵を貸して下さい。
そういう使い方をしていらっしゃる方は少ないと思うので、まず作り方から。
xemacs -vanilla
で起動した XEmacs の *scratch* で以下の式を eval して下さい。
(let ((oframe (selected-frame)))
(setq default-frame-alist (cons '(minibuffer . nil) default-frame-alist)
default-minibuffer-frame (make-frame
'((minibuffer . only)
(height . 1)
(menubar-visible-p . nil)
(default-toolbar-visible-p . nil)
(name ."MINIBUFF"))))
(make-frame)
(delete-frame oframe))
これは XEmacs だけでなく、Emacs 20 や Mule 2.3(a)19.34 などでも使えるよ
うに書いてあります。
さて、こうしてから次の 2 種類の式を eval してみて下さい。
;; 1
(let ((pop-up-frames t))
(pop-to-buffer "*TMP*")
(y-or-n-p "What? "))
;; 2
(let ((pop-up-frames t))
(pop-to-buffer "*TMP*")
(read-string "What? "))
おそらく後者を試すと minibuffer の frame に focus しないため、文字入力
ができないと思うのですが、いかがでしょうか?
ぼくの場合 XEmacs だけが read-string などの特定の関数群でだめで、Emacs
20 と Mule 2.3(a)19.34 では問題ありません。
お知恵を借りたいのは、後者の場合にも XEmacs で文字入力ができるようにす
る方法です。どうぞよろしくお願いします。
;; height = 1 を指定しているのに XEmacs だけは 2 の frame ができるとい
;; う問題もあります。
--
Katsumi Yamaoka <yamaoka(a)ga.sony.co.jp>