サイドウィンドウは統合開発環境(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-buffers、C-h f、M-x shell、M-x list-tags、M-x dired-default-directory-on-leftを評価すれば上図のフレームレイアウトが再作成されるはずです。