Previous: , Up: サイドウィンドウ   [Contents][Index]


29.17.3 サイドウィンドウによるフレームのレイアウト

サイドウィンドウは統合開発環境(IDE)が提供するような、より複雑なフレームレイアウトの作成に使用できます。そのようなレイアウトでは通常の編集アクティビティが行われるのはメインウィンドウ領域になります。サイドウィンドウは通常の意味においての編集は意図していません。それよりはカレント編集アクティビティを補足するためのファイルやタグやバッファーのリスト、ヘルプ情報、検索やgrepの結果、シェル出力などの情報の表示を意図しています。

そのようなフレームのレイアウトは以下のような外観になるでしょう:

     ___________________________________
    |          *Buffer List*            |
    |___________________________________|
    |     |                       |     |
    |  *  |                       |  *  |
    |  d  |                       |  T  |
    |  i  |                       |  a  |
    |  r  |   Main Window Area    |  g  |
    |  e  |                       |  s  |
    |  d  |                       |  *  |
    |  *  |                       |     |
    |_____|_______________________|_____|
    | *help*/*grep*/  |  *shell*/       |
    | *Completions*   |  *compilation*  |
    |_________________|_________________|
    |             Echo Area             |
    |___________________________________|


以下は上図フレームレイアウトを作成するコードをセットアップするためにdisplay-buffer-in-side-windowとともにウィンドウパラメーター(see ウィンドウのパラメーター) を使用する方法を説明するための例です。

(defvar parameters
  '(window-parameters . ((no-other-window . t)
                         (no-delete-other-windows . t))))

(setq fit-window-to-buffer-horizontally t)
(setq window-resize-pixelwise t)

(setq
 display-buffer-alist
 `(("\\*Buffer List\\*" display-buffer-in-side-window
    (side . top) (slot . 0) (window-height . fit-window-to-buffer)
    (preserve-size . (nil . t)) ,parameters)
   ("\\*Tags List\\*" display-buffer-in-side-window
    (side . right) (slot . 0) (window-width . fit-window-to-buffer)
    (preserve-size . (t . nil)) ,parameters)
   ("\\*\\(?:help\\|grep\\|Completions\\)\\*"
    display-buffer-in-side-window
    (side . bottom) (slot . -1) (preserve-size . (nil . t))
    ,parameters)
   ("\\*\\(?:shell\\|compilation\\)\\*" display-buffer-in-side-window
    (side . bottom) (slot . 1) (preserve-size . (nil . t))
    ,parameters)))

これは固定化された名前をもつバッファーにたいしてdisplay-buffer-alistエントリー(バッファーを表示するウィンドウの選択を参照)を指定します。特にフレーム上辺に高さ調節可能な*Buffer List*と、フレーム右辺に幅調節可能な*Tags List*の表示を要求します。さらにフレーム下辺左側のウィンドウでバッファー*help**grep**Completions*の共有、フレーム下辺右側のウィンドウではバッファー*shell**compilation*の表示を要求します。

ウィンドウの水平調節を可能にするためにオプションfit-window-to-buffer-horizontallyが非nil値をもたなければならないことに注意してください。フレームの上下にあるサイドウィンドウの高さとフレームの左右にあるサイドウィンドウの幅を保持するためのエントリーも追加しています。フレーム最大化時にサイドウィンドウがそれに応じたサイズを維持することを保証するために、変数window-resize-pixelwiseに非nil値をセットしています。ウィンドウのリサイズを参照してください。

最後のフォームではこれらの各ウィンドウにno-other-windowパラメーターをインストールすることによって、作成したサイドウィンドウにたいするC-x oを介してアクセスできないことも保証しています。さらにこれらの各ウィンドウにno-delete-other-windowsパラメーターをインストールして、C-x 1によるサイドウィンドウの削除ができないことを保証しています。

diredバッファーは固定化された名前をもたないので、フレーム左辺の細いディレクトリーバッファーを表示するためにスペシャル関数dired-default-directory-on-leftを使用しています。

(defun dired-default-directory-on-left ()
  "左側サイドウィンドウに詳細を隠して`default-directory'を表示する。"
  (interactive)
  (let ((buffer (dired-noselect default-directory)))
    (with-current-buffer buffer (dired-hide-details-mode t))
    (display-buffer-in-side-window
     buffer `((side . left) (slot . 0)
              (window-width . fit-window-to-buffer)
              (preserve-size . (t . nil)) ,parameters))))

これまでのフォームを評価して任意の順序でM-x list-buffersC-h fM-x shellM-x list-tagsM-x dired-default-directory-on-leftを評価すれば上図のフレームレイアウトが再作成されるはずです。