Next: , Up: ウィンドウ   [Contents][Index]


29.1 Emacsウィンドウの基本概念

ウィンドウ(window)とはバッファー(バッファーを参照)の表示に使用されるスクリーン領域です。ウィンドウはフレームへとグループ化されます(フレームを参照)。それぞれのフレームは最低でも1つのウィンドウを含みます。ユーザーは複数のバッファーを一度に閲覧するために、フレームを複数のオーバーラップしないウィンドウに分割することができます。Lispプログラムはさまざまな目的にたいして複数のウィンドウを使用できます。たとえばRmailでは1つのウィンドウでメッセージタイトル、もう一方のウィンドウで選択したメッセージのコンテンツを閲覧できます。

EmacsはX Window Systemのようなグラフィカルなデスクトップ環境やウィンドウシステムとは異なる意味で“ウィンドウ(window)”という用語を使用します。EmacsがX上で実行されているときはEmacsに所有されるグラフィカルなXウィンドウは、Emacsでのフレームに相当します。Emacsがテキスト端末上で実行されているときには、Emacsフレームそれぞれが1つの端末スクリーン全体を占有します。いずれの場合においても、フレームには1つ以上のEmacsウィンドウが含まれます。曖昧さをなくすために、Emacsフレームに相当するウィンドウシステムのウィンドウを指す際には、ウィンドウシステムのウィンドウ(window-system window)という用語を使うことにします。

Xのウィンドウとは異なり、Emacsのウィンドウはタイル表示(tiled)されるので、それらのフレーム領域内でオーバーラップされることは決してありません。あるウィンドウが作成、リサイズ、削除されるとき変更されたウィンドウスペースの変更は他のウィンドウから取得・譲与されるので、そのフレームの総領域に変化はありません。

Emacs Lispではウィンドウは特別なLispオブジェクトタイプで表されます(ウィンドウ型を参照)。

Function: windowp object

この関数はobjectがウィンドウ(バッファーの表示有無に関わらず)ならt、それ以外はnilをリターンする。

生きたウィンドウ(live window)とは、あるフレーム内で実際にバッファーを表示しているウィンドウのことです。

Function: window-live-p object

この関数はobjectが生きたウィンドウならt、それ以外はnilをリターンする。生きたウィンドウとはバッファーを表示するウィンドウのこと。

各フレーム内のウィンドウはウィンドウツリー(window tree)内へと組織化されます。ウィンドウとフレームを参照してください。それぞれのウィンドウツリーのリーフノード(leaf nodes)は、実際にバッファーを表示している生きたウィンドウです。ウィンドウツリーの内部ノード(internal node)は内部ウィンドウ(internal windows)と呼ばれ、これらは生きたウィンドウではありません。

有効なウィンドウ(valid window)とは、生きたウィンドウか内部ウィンドウのいずれかです。有効なウィンドウにたいしては、それを削除(delete)、すなわちそのウィンドウのフレームから削除することができます(ウィンドウの削除を参照)。その場合、それは有効なウィンドウではなくなりますが、それを表すLispオブジェクトは依然として他のLispオブジェクトから参照されたままかもしれません。削除されたウィンドウは保存されたウィンドウ構成(window configuration)をリストアすることにより再び有効にすることができます(ウィンドウの構成を参照)。

window-valid-pにより、削除されたウィンドウから有効なウィンドウを区別できます。

Function: window-valid-p object

この関数はobjectが生きたウィンドウかウィンドウツリー内の内部ウィンドウならtをリターンする。それ以外(objectが削除されたウィンドウの場合も含む)はnilをリターンする。

以下の図は生きたウィンドウの構造を示しています:

        ____________________________________________
       |________________ Tab Line _______________|RD| ^
       |______________ Header Line ______________|  | |
     ^ |LS|LM|LF|                       |RF|RM|RS|  | |
     | |  |  |  |                       |  |  |  |  | |
Window |  |  |  |                       |  |  |  |  | Window
Body | |  |  |  |      Window Body      |  |  |  |  | Total
Height |  |  |  |                       |  |  |  |  | Height
     | |  |  |  |<- Window Body Width ->|  |  |  |  | |
     v |__|__|__|_______________________|__|__|__|  | |
       |_________ Horizontal Scroll Bar _________|  | |
       |_______________ Mode Line _______________|__| |
       |_____________ Bottom Divider _______________| v
        <---------- Window Total Width ------------>

ウィンドウの中央はボディー(body: 本体、本文)と呼ばれるバッファーテキストが表示される場所です。テキストエリアは、ウィンドウ装飾(window decorations)と呼ばれる一連のオプションエリアで囲まれている可能性があります。左右には内側から外側に向かって図中にLFとRFで示される左右のフリンジ(フリンジを参照)、LMとRMで示される左右のマージン(マージン内への表示を参照)、そしてLSとRSはスクロールバー(スクロールバーを参照)で、これは常に表示されるのはいずれか一方だけです。さらにRDで示されるのが右ディバイダー(ウィンドウディバイダーを参照)です。ウィンドウ上端にはヘッダーライン(ウィンドウのヘッダーラインを参照)、ウィンドウ下端には水平スクロールバー(スクロールバーを参照)、モードライン(モードラインのフォーマットを参照)、下端ディバイダー(ウィンドウディバイダーを参照)があります。これらを合わせて、ウィンドウの左や右の装飾(left and right decorations)と呼びます。

ウィンドウの上端にあるのがタブラインとヘッダーライン(ウィンドウのヘッダーラインを参照)です。ウィンドウにヘッダーラインやタブラインがある場合には、それらはウィンドウのテキストエリア(text area: テキスト領域)に含まれます。ウィンドウの下端にあるのが水平スクロールバー(スクロールバーを参照)とモードライン(モードラインのフォーマットを参照)、そして下ディバイダー(ウィンドウディバイダーを参照)です。これらを合わせてウィンドウの上や下の装飾(top and bottom decorations)と呼びます。

図には省略した特別なエリアが2つあります。

いずれのケースでも、たとえ結果となる構造のスクリーンスペースがバッファーテキストの表示に使用されなくても、そのウィンドウのボディーとみなされます。

行番号(と周囲の空白)display-line-numbers-mode (Display Custom in The GNU Emacs Manualを参照)によって表示されるので装飾ではなく、そのウィンドウのボディー部分とみなされます。

内部ウィンドウがテキストを表示したり装飾をもつことはありません。したがってこれらにたいして“body”という概念は意味をもちません。実際にウィンドウのbodyを操作するほとんどの関数は、内部ウィンドウに適用するとエラーとなります。

デフォルトではEmacsフレームはメッセージ表示やユーザー入力受け取りに使用される1つの特別な生きたウィンドウ — ミニバッファーウィンドウ(minibuffer window)を表示します(ミニバッファーのウィンドウを参照)。ミニバッファーウィンドウはテキストの表示に使用されるのでbodyがありますが、タブライン、ヘッダーライン、それにマージンはありません。最後にツールチップフレームでツールチップを表示するのに使用されるツールチップウィンドウ(tooltip window)には、ボディーはありますが装飾は何もありません(ツールチップを参照)。