[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: minibuffer force sizechange



>>>>> In [emacs-w3m : No.07468] 土屋さん wrote:

> ふーむ.shrink-window() が先だったのには意味があったんですね….

偶然そうしただけですって。;-)

[...]

>  -- User Option: window-min-height
>      この変数の値は, ウィンドウが自動的に削除されるまでにどの程度まで
>      ウィンドウが短くなりうるかを決定する.  ウィンドウを
>      `window-min-height'行未満に小さくすると自動的に削除され, これより
>      短いウィンドウは作成できない.  絶対的な最小の高さは2行(モード行
>      に1行, バッファの表示に1行)である.  ウィンドウサイズを変える処理
>      では, この変数が2未満であると2に設定し直す.  デフォルト値は4であ
>      る.

この記述でちょっと疑問なのは modeline が無い frame (modeline も
枠もない画面いっぱいの幅の minibuffer だけの frame を画面の底に
置いて使っていたことがあります) での振る舞いなんですが、ま、それ
はいいとして、

[...]

> というわけで,window-min-height の束縛は効いていないのではないでしょ
> うか?

そうかもしれませんね。

[...]

> でまあ,簡単にこの問題を解決する方法はないのかなあ,とつらつら考えて
> みたのですが,

>     (1) (save-window-excursion (enlarge-window 1))
>     (2) (enlarge-window 0)

> という2つの案を思いつきました.後者の方が好みなんですが,この処理が必
> 要になった元々の事情をきちんと把握していないので,これでうまくいくのか
> 検証できません.どうでしょうか? > 山岡さん

実を言うと、window の高さを増減または減増させる動作そのものはど
うでもよくて、例えば w3m-update-tab-line() の以前の中身

(set-cursor-color (frame-parameter (selected-frame) 'cursor-color))

でも目的は達せられたときがあるのです[1]。しかし、これには問題が
ある[2] ことがわかって、現在の姿になっています。要は、modeline
や header-line の表示をプログラムで変更しても、実際に目に見える
変化が起きない問題への対策です。

[1] [emacs-w3m:03795] から始まる thread または
    http://news.gmane.org/group/gmane.emacs.w3m/thread=1172
[2] [emacs-w3m:07242] から始まる thread または
    http://news.gmane.org/group/gmane.emacs.w3m/thread=4605

これは、電化製品の調子が悪いときによくやる「たたいてみる」行為に
似ています。合理的な説明ができないけれど、とにかく効く、という。

一方ぼくは、合理的な解決を求めて emacs-devel に何度かねじこんで
もいます。その答えが先端の Emacs の force-mode-line-update の実
装や、w3m-force-window-update で使っている force-window-update
なんです。なんですが、どうも完全ではないような気がしないでもなく
はない...。

それから、Emacs 21.1 〜 21.3.50 のそれぞれで効果のほどが違ったり
もします。さらに、プラットフォームによっても違いがあるであろうこ
とが予想されます。そういうわけで、特に苦情が寄せられているわけで
はない現行のやり方を変えるには、長い検討時間を厭わない覚悟が必要
でしょう。

実は、きのうの変更で以下のようにしたことは、ちょっぴり不安ではあ
るのですよ。

>     (let ((window-min-height 0))
>       (enlarge-window 1)
>       (unless (eq (next-window nil 'ignore-minibuf) (selected-window))
>         (shrink-window 1)))

*w3m* の window と minibuffer だけがある frame で、*w3m* の
window で最初に行なう enlarge-window は視覚的な変化を生まず、そ
の次も同様です。つまり「たたいた」のに「びくともしない」わけです。
とは言え、先に書いたようにこれは window の高さを変更することは本
質ではなくて、そこで起きる副作用で modeline や header-line の表
示が書き代わってくれることを期待しての操作であって、少なくともぼ
くの環境ではうまくいっている気がするので、明らかな不具合を起こさ
ない限りそお〜っとしておきたいのが正直な気持ちです。あ、もちろん
度胸と霊感のあるボランティアの参加は歓迎しますよ。;-)