Next: , Up: モードラインのフォーマット   [Contents][Index]


24.4.1 モードラインの基礎

各モードラインのコンテンツはバッファーローカル変数mode-line-formatにより指定されます(モードライン制御のトップレベルを参照)。この変数はモードライン構文(mode line construct)を保持します。これはバッファーのモードラインに何を表示するかを制御するテンプレートです。header-line-formatの値は同じ方法によりバッファーのヘッダーラインを指定します。同一のバッファーにたいするすべてのウィンドウは、mode-line-formatheader-line-formatのパラメーター(ウィンドウのパラメーターを参照)がそのウィンドウに指定されていなければ、同じmode-line-formatheader-line-formatを使用します。

効率的な理由によりEmacsは各ウィンドウのモードラインとヘッダーラインを連続で再評価しません。たとえばウィンドウ構成(window configuration)の変更やバッファーの切り替え、バッファーのナローイング(narrowing)やワイドニング(widening)、スクロールやバッファーの変更等、それを呼び出す状況が出現したときにEmacsは再評価を行います。mode-line-formatheader-line-format(モードラインで使用される変数を参照)により参照されるすべての変数、またはテキストが表示される方法に影響を与えるデータ構造(Emacsのディスプレイ表示を参照)を変更する場合には、表示を更新するために関数force-mode-line-updateを使用するべきです。

Function: force-mode-line-update &optional all

この関数は次の再表示サイクルの間にすべての関連する変数の最新の値にもとづいて、カレントバッファーのモードラインとヘッダーラインの更新をEmacsに強制する。オプション引数allが非nilなら、すべてのモードラインとヘッダーラインの更新を強制する。

この関数はメニューバーとフレームタイトルの更新も強制する。

選択されたウィンドウのモードラインは、通常はフェイスmode-line-activeを使用して異なるカラーで表示されます。かわりに他のウィンドウのモードラインはフェイスmode-line-inactiveで表示されます。フェイスを参照してください。

Function: mode-line-window-selected-p

モードラインのウィンドウの選択/非選択の間にもっと大きな差異をもたせたければ、:eval構文内でこの述語を使うことができる。たとえば選択されているウィンドウのバッファー名をボールド(bold: 太字)、他のウィンドウはイタリック(italic: 斜体)で表示したければ以下のように記述できる:

(setq-default
 mode-line-buffer-identification
 '(:eval (propertize "%12b"
		     'face (if (mode-line-window-selected-p)
			       'bold
			     'italic))))

モードラインに大量のデータを出力して、モードラインの最後にある要素を右側へ押し出すモードがあります。mode-line-compact変数が非nilなら、Emacsは連続する複数のスペースを単一のスペースにして、モードラインを“圧縮する”ことができます。この変数がlongなら、モードラインがカレントで選択されたウィンドウより広いときだけこれを行います(これは文字の表示幅ではなく文字数にもとづく近似により計算される)。この変数は特定バッファーでのみモードラインを圧縮するために、バッファーローカルにすることができます。