ウィンドウとは、バッファ(バッファを参照)を表示するために使用できる画面上の領域のことです。ウィンドウはフレーム(フレームを参照)にグループ化されます。各フレームには少なくとも1つのウィンドウが含まれており、ユーザーはフレームを複数の重なり合わないウィンドウに分割することで、複数のバッファを同時に表示できます。Lispプログラムでは、さまざまな目的で複数のウィンドウを利用できます。例えばRmailでは、一方のウィンドウでメッセージタイトルの一覧を、別のウィンドウで選択したメッセージの内容を表示できます。
Emacsにおける「ウィンドウ」という用語は、グラフィカルなデスクトップ環境や、X Window Systemなどのウィンドウシステムにおける意味とは異なります。EmacsをX上で動作させる場合、Emacsプロセスが所有する各グラフィカルなXウィンドウは、1つのEmacsフレームに対応します。Emacsをテキストターミナル上で動作させる場合、各Emacsフレームはターミナル画面全体を埋めます。いずれの場合も、フレームには1つ以上のEmacsウィンドウが含まれることがあります。混同を避けるため、Emacsフレームに対応するウィンドウシステム上のウィンドウを指す場合には、ウィンドウシステムウィンドウという用語を使用します。
X Windowsとは異なり、Emacsのウィンドウはタイル状に配置されており、フレーム領域内で重なり合うことはありません。ウィンドウが作成、サイズ変更、または削除される際、ウィンドウ領域の変化分は同じフレーム上の他のウィンドウから差し引かれたり割り当てられたりするため、フレームの総面積は変わりません。フレームのウィンドウレイアウトは、そのフレームに対するすべてのタイル操作の結果となります。
Emacs Lispでは、ウィンドウは特殊なLispオブジェクト型で表現されます(ウィンドウ型を参照)。2つのウィンドウが同一であるのは、それらが同じLispオブジェクトで表現されている場合に限られます。
この関数は、object がウィンドウ(バッファを表示するか否かにかかわらず)である場合に t を返します。それ以外の場合は、nil を返します。
ライブウィンドウとは、フレーム内にバッファを実際に表示しているもののことです。
この関数は、object がライブウィンドウであれば t を、そうでなければ nil
を返します。ライブウィンドウとは、バッファを表示しているウィンドウのことです。
各フレームのウィンドウは、ウィンドウツリーとして構成されています。ウィンドウとフレームを参照してください。各ウィンドウツリーのリーフノードはライブウィンドウ—実際にバッファを表示しているウィンドウのことです。ウィンドウツリーの内部ノードは内部ウィンドウであり、ライブではありません。
有効なウィンドウとは、ライブまたは内部のいずれかであるウィンドウのことです。有効なウィンドウは削除、すなわちフレームから除去することができます(ウィンドウの削除を参照)。削除されるともはや有効ではありませんが、それを表すLispオブジェクトは、他のLispオブジェクトから依然として参照されている可能性があります。削除されたウィンドウは、保存済みのウィンドウ構成を復元することで、再び有効にすることができます(ウィンドウ構成を参照)。
window-valid-p を使えば、有効なウィンドウと削除済みのウィンドウを区別できます。
この関数は、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 ------------>
そのウィンドウの中央にあるのがボディであり、ここにバッファテキストが表示されます。ボディの周囲には、任意で配置できる一連の領域を設けることができ、これらをウィンドウ装飾と呼びます。左右には、内側から外側に向かって、LFおよびRFで表される左右のフリンジ(フリンジを参照)、図式中でLMおよびRMと表される左右のマージン(マージン内での表示を参照)、LSおよびRSで表される左右の垂直スクロールバー(一度にどちらか一方のみ存在し、スクロールバーを参照)、そしてRDで表される右区切り線(ウィンドウ区切り線を参照)があります。これらを合わせて、ウィンドウの左右の装飾と呼びます。
ウィンドウの上部には、タブ行とヘッダー行があります(ウィンドウヘッダー行を参照)。ウィンドウのテキスト領域には、ヘッダー行とタブ行が含まれている場合、それらが含まれます。ウィンドウの下部には、水平スクロールバー(スクロールバーを参照)、モード行(モード行の形式を参照)、および下部区切り線(ウィンドウ区切り線を参照)があります。これらが合わせて、ウィンドウの上下の装飾を構成します。
回路図で省略されている特殊な領域が2箇所あります:
いずれの場合も、生成されたアーティファクトはウィンドウ本体の一部とみなされますが、そのスクリーン空間をバッファテキストの表示に使用することはできません。
また、display-line-numbers-mode(The GNU Emacs ManualのDisplay
Customを参照)で表示される行番号(およびその周囲の空白)も、装飾としてはカウントされない点に注意してください。これらもウィンドウの本体の一部です。
内部ウィンドウにはテキストも装飾も表示されません。したがって、「ボディ」という概念はこれらのウィンドウには当てはまりません。実際、ウィンドウのボディを操作するほとんどの関数は、内部ウィンドウに適用するとエラーを返します。
デフォルトでは、Emacsフレームには、メッセージの表示やユーザー入力の受け付けに使用される特別なライブウィンドウが1つ用意されています。それがミニバッファウィンドウです(ミニバッファウィンドウを参照)。ミニバッファウィンドウはテキストの表示に使用されるため、本体はありますが、タブやヘッダー行、余白などは一切ありません。最後に、ツールチップフレーム内でツールチップを表示するために使用されるツールチップウィンドウ(ツールチップを参照)にも本体はありますが、装飾は一切ありません。