各モードラインの内容は、バッファローカル変数 mode-line-format
によって指定されます(モードライン制御の最上位レベル
を参照)。この変数には モードライン構造体、すなわちバッファのモードラインに表示される内容を制御するテンプレートが格納されています。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は各ウィンドウのモードラインとヘッダーラインを継続的に再計算することはありません。ウィンドウ構成を変更したり、バッファを切り替えたり、バッファを狭めたり広げたり、スクロールしたり、あるいはバッファを変更したりするなど、必要と思われる状況になった場合にのみ再計算を行います。mode-line-format や header-line-format で参照される変数(モードラインで使用される変数
を参照)や、テキストの表示方法に影響を与えるその他のデータ構造(Emacsの表示 を参照)を変更した場合は、関数 force-mode-line-update を使用して表示を更新してください。
この関数は、次回の再表示サイクルにおいて、関連するすべての変数の最新値に基づき、Emacsに現在のバッファのモード行とヘッダー行を強制的に更新させます。オプション引数
all が nil
以外の場合、すべてのモード行とヘッダー行の更新が強制されます。
この関数は、メニューバーとフレームタイトルの更新も強制します。
選択中のウィンドウのモードラインは、通常、フェイス mode-line-active
を用いて異なる色で表示されます。他のウィンドウのモードラインは、代わりにフェイス mode-line-inactive に表示されます。フェイスを参照してください。
選択したウィンドウと選択していないウィンドウで、モード行により大きな差異を持たせたい場合は、:eval
構文の中でこの述語を使用できます。例えば、選択したウィンドウではバッファ名を太字で、それ以外のウィンドウでは斜体で表示したい場合は、次のように記述できます。
(setq-default mode-line-buffer-identification '(:eval (propertize "%12b" 'face (if (mode-line-window-selected-p) 'bold 'italic))))