[Date Prev][Date Next][Thread Prev][][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 )