[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: minibuffer force sizechange
>> On Thu, 27 Jan 2005 17:48:17 +0900
>> 「山」== yamaoka@jpl.org (Katsumi Yamaoka) said as follows:
山> その frame に *w3m* の window と minibuffer しか無いとき、*w3m* の
山> window で実行される enlarge-window は minibuffer を潰そうとします
山> が、実際にそれは起きず、単に mode-line と header-line の表示を更新
山> するだけの効果があるようです。
ふーむ.shrink-window() が先だったのには意味があったんですね….でもっ
て enlarge-window() のドキュメントを読み直してみると
-- コマンド: enlarge-window SIZE &optional HORIZONTAL
この関数は, 隣り合うウィンドウから場所を奪って, 選択されているウィ
ンドウをSIZE行高くする. 1つのウィンドウから場所を奪い取り, 奪い
尽くすと別のウィンドウから取る. 場所を奪われたウィンドウが
`window-min-height'行未満になると, そのウィンドウは消える.
と気になる記述を発見しました.とすると,隣り合うウィンドウが特定の大き
さならば,隣り合うウィンドウを消してしまうので,直後に shrink-window()
してもウィンドウ構成は回復しないということになるのかな,と w3m-e21.el
を確認したら,
(let ((window-min-height 0))
(enlarge-window 1)
(unless (eq (next-window nil 'ignore-minibuf) (selected-window))
(shrink-window 1)))
おお,流石は山岡さん,既に対策済なのかと思ったのも束の間,
-- User Option: window-min-height
この変数の値は, ウィンドウが自動的に削除されるまでにどの程度まで
ウィンドウが短くなりうるかを決定する. ウィンドウを
`window-min-height'行未満に小さくすると自動的に削除され, これより
短いウィンドウは作成できない. 絶対的な最小の高さは2行(モード行
に1行, バッファの表示に1行)である. ウィンドウサイズを変える処理
では, この変数が2未満であると2に設定し直す. デフォルト値は4であ
る.
という記述を発見.確かに,Emacs-21.3 で以下の式を評価してみると,
(save-window-excursion
(let ((window-min-height 0))
(enlarge-window 1)
window-min-height))
=> 2
となります.というわけで,window-min-height の束縛は効いていないのでは
ないでしょうか? 試しに,
(progn
(delete-other-windows)
(let ((window-min-height 2))
(select-window (split-window nil 2)))
(let ((window-min-height 0))
(enlarge-window 1)))
というようなコードを評価してみると,確かに作ったはずのウィンドウが消え
てしまいます.
でまあ,簡単にこの問題を解決する方法はないのかなあ,とつらつら考えてみ
たのですが,
(1) (save-window-excursion (enlarge-window 1))
(2) (enlarge-window 0)
という2つの案を思いつきました.後者の方が好みなんですが,この処理が必
要になった元々の事情をきちんと把握していないので,これでうまくいくのか
検証できません.どうでしょうか? > 山岡さん
--
土屋 雅稔 ( TSUCHIYA Masatoshi )