各モードラインのコンテンツはバッファーローカル変数mode-line-format
により指定されます(モードライン制御のトップレベルを参照)。この変数はモードライン構文(mode line
construct)を保持します。これはバッファーのモードラインに何を表示するかを制御するテンプレートです。header-line-format
およびtab-line-format
の値は同じ方法によりバッファーのヘッダーラインとタブラインを指定します。同一のバッファーにたいするすべてのウィンドウは、mode-line-format
、header-line-format
、tab-line-format
のパラメーター(ウィンドウのパラメーターを参照)がそのウィンドウに指定されていなければ、同じmode-line-format
、header-line-format
、tab-line-format
を使用します。
効率的な理由によりEmacsは各ウィンドウのモードラインとヘッダーラインを連続で再評価しません。たとえばウィンドウ構成(window
configuration)の変更やバッファーの切り替え、バッファーのナローイング(narrowing)やワイドニング(widening)、スクロールやバッファーの変更等、それを呼び出す状況が出現したときにEmacsは再評価を行います。mode-line-format
やheader-line-format
(モードラインで使用される変数を参照)により参照されるすべての変数、またはテキストが表示される方法に影響を与えるデータ構造(Emacsのディスプレー表示を参照)を変更する場合には、表示を更新するために関数force-mode-line-update
を使用するべきです。
この関数は次の再表示サイクルの間にすべての関連する変数の最新の値にもとづいて、カレントバッファーのモードラインとヘッダーラインの更新をEmacsに強制する。オプション引数allが非nil
なら、すべてのモードラインとヘッダーラインの更新を強制する。
この関数はメニューバーとフレームタイトルの更新も強制する。
選択されたウィンドウのモードラインは、通常はフェイスmode-line-active
を使用して異なるカラーで表示されます。かわりに他のウィンドウのモードラインはフェイスmode-line-inactive
で表示されます。フェイスを参照してください。
モードラインのウィンドウの選択/非選択の間にもっと大きな差異をもたせたければ、: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
なら、モードラインがカレントで選択されたウィンドウより広いときだけこれを行います(これは文字の表示幅ではなく文字数にもとづく近似により計算される)。この変数は特定バッファーでのみモードラインを圧縮するために、バッファーローカルにすることができます。