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

[xyzzy:00202] ウインドウに関する贅沢な要望



こんにちは。

outlineモードでCtrl F12を押すと、ウインドウが開きますが、
またCtrl F12を押すと
 +-------+--------+------------+
 | サマリ| サマリ | 元ファイル |
 +-------+--------+------------+
こんな感じになってしまいます。まあこれはがんばれば
避けることができるかなぁと思っているのですが、
とても親切なマクロにしようと思うと、
今のウインドウ(元ファイル)の左横にサマリが開いているか
調べたいとか、凝った要望が出てくる・・・と思いました。

それ以外にも、以前から使っていて思ったのが、
Possible completions are: とかのウインドウが不用意に出てしまった時に
元に戻すのが面倒とか。
なので、今のウインドウの配置をちょっと記憶しておいて、また元に戻す
ってことが簡単にできないかなぁと思っていました。

昨日たまたま、別の調べごとがあって、Emacsのマニュアルを
見ていたところEmacsではWindow系の関数が結構充実
していそうだなぁと思いました。

特に面白そうだったのが、これとこれ。
(current-window-configuration)
(set-window-configuration saved-windows)

window-edges これも使えるかもしれないけど、使い方が面倒かもしれない。^^;

以下マニュアルのコピー
--------------------------------------------------------------------
Function: window-edges &optional window

この関数は、 window の edge coordinate (訳注:エッジ座標)のリストを返します。リストにおける順番は (left top right bottom) の順で、(全て)画面の左上端を 0, 0 とした値です。 right は window で用いられる最右端のカラムより 1 大きい値で、 bottom は window と(そのモードライン) で用いられる最下端の行 (訳注:row)より 1 大きい値になります。 

window が画面全体を占める場合、 right と bottom はそれぞれ (window-width) と (window-height) の返す値になります。 

window が nil の場合、selected ウィンドウを用います。 

  (window-edges (selected-window))
  => (0 0 80 49)
  (list 0 0 (window-width) (window-height))
  => (0 0 80 49)


Function: current-window-configuration

この関数は、 (Emacs の)カレントなウィンドウコンフィギュレーション ( ウィンドウの数、その大きさとカレントバッファ、どのウィンドウが selected ウィンドウであるか、その各々に表示されているバッファ、どこから表示を始めているか、ポイントとマークのポジション) を示すオブジェクトを(訳注:新しく作って)返します。カレントバッファのポイントは例外で、値のセーブは行ないません。以下の save-window-excursion の説明で、 (set-window-configuration とともに用い) 

save-window-excursion をエミュレートする例を示しました。 

Function: set-window-configuration configuration

この関数は、 (Emacs の)ウィンドウとバッファを configuration に示された状態にリストアします。 configuration は current-window-configuration の返した 値でなくてはいけません。 

Special Form: save-window-excursion forms*

この関数は、ウィンドウの大きさと内容を保持したまま forms を(順に)実行します。これは各ウィンドウが (訳注:前と)同じ場所からバッファ表示を行なうようリストアします。カレントバッファのポイント値はリストアしません (リストアするには save-excursion を用います)。 

forms 中の最後のフォームの値を返します。 

  (split-window)
  => #<window 25 on control-structure.texinfo>
  (setq w (selected-window))
  => #<window 19 on control-structure.texinfo>
  (save-window-excursion
     (delete-other-windows w)
     (switch-to-buffer "foo")
     'do-something)
  => do-something
save-window-excursion と等価なものを以下に示します。 

  (let ((saved-windows (current-window-configuration)))
    forms
    (set-window-configuration saved-windows))

------------------------------------------------------------
逸見雅人        Email   henmi@xxxxxxxxxxxxx
Masahito Henmi

Index Home