Next: , Previous: , Up: Mode Line Format   [Contents][Index]


22.4.2 モードラインのデータ構造

モードラインのコンテンツはモードライン構文(mode line construct)と呼ばれるデータ構造によって制御されます。モードライン構文はリストやシンボル、数字を保持するバッファーローカル変数により構成されます。それぞれのデータ型は以下で説明するようにモードラインの外見にたいして特別な意味をもちます。フレームタイトル(Frame Titlesを参照)とヘッダーライン(Header Linesを参照)にも同じデータ構造が使用されます。

固定文字列のようなシンプルなモードライン構文の場合もありますが、通常はモードライン構文のテキストを構築するために固定文字列と変数の値を組み合わせる方法を指定します。これらの変数の多くはその変数自体がその値によりモードライン構文を定義する変数です。

以下はモードライン構文における、さまざまなデータ型の意味です:

string

モードライン構文における文字列は、文字列内に%構文(%-constructs)を含む以外はそのまま表現される。これらは他のデータによる置換を意味する。%-Constructsを参照のこと。

文字列の一部がfaceプロパティをもつ場合には、バッファー内でそれらが表示されるときと同じようにテキスト表示を制御する。faceプロパティをもたない文字はデフォルトのフェイスmode-line、またはmode-line-inactiveで表示される(Standard Faces in The GNU Emacs Manualを参照)。string内のhelp-echoプロパティとkeymapプロパティは特別な意味をもつ。Properties in Modeを参照のこと。

symbol

モードライン構文におけるシンボルはその値を意味する。モードライン構文としては、symbolの値はsymbolの位置に使用される。しかしシンボルtnilは値がvoidであるようなシンボルとして無視される。

例外が1つある。symbolの値が文字列なら、それはそのまま表示されて%構成は認識されない。

symbolが“危険”とマークされていない(非nilrisky-local-variableプロパティをもつ)場合は、symbolの値中で指定されたテキストプロパティはすべて無視される。これには、symbolの値中の文字列のテキストプロパティ、同様に文字列内の:evalフォームと:propertizeフォームがすべて含まれる。(これはセキュリティー上の理由による。危険とマークされていない変数は、ユーザーへの問い合わせなしでファイル変数から自動的にセットされ得る。)

(string rest…)
(list rest…)

最初の要素が文字列かリストであるようなリストは、すべての要素を再帰的に処理してその結果を結合することを意味する。これはモードライン構文においてもっとも一般的なフォームである。

(:eval form)

最初の要素がシンボル:evalであるようなリストは、formを評価してその結果を表示する文字列として使用するよう指示する。この評価が任意のファイルをロードできないことを確認すること。ファイルをロードすると無限再帰が発生するかもしれない。

(:propertize elt props…)

最初の要素がシンボル:propertizeであるようなリストは、モードライン構文eltを再帰的に処理してpropsで指定されるテキストプロパティに結果を加えるよう指示する。引数propsは0個以上のtext-propertyvalueのペアーで構成されること。

(symbol then else)

最初の要素がキーワード以外のシンボルであるようなリストは条件文を指定する。その意味はsymbolの値に依存する。symbolが非nil値をもつ場合は、モードライン構文として2つ目の要素thenが再帰的に処理され、それ以外は3つ目の要素elseが再帰的に処理される。elseは省略でき、その場合にはsymbolの値がnilかvoidならモードライン構文は何も表示しない。

(width rest…)

最初の要素が整数であるようなリストはrestの結果の切り詰め、またはパディングを指定する。残りの要素restはモードライン構文として再帰的に処理されて互いに結合される。widthが正で結果の幅がwidthより少なければ右側にスペースがパディングされる。widthが負で結果の幅が-widthより大きければ右側が切り詰められる。

たとえばウィンドウ最上部からのバッファー位置をパーセント表示するには(-3 "%p")のようなリストを使用すればよい。