[xyzzy:00202] ウインドウに関する贅沢な要望
- Subject: [xyzzy:00202] ウインドウに関する贅沢な要望
- From: Masahito Henmi <henmi@xxxxxxxxxxxxx>
- X-mailer: Denshin 8 Go V321.2b5
こんにちは。
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