モードラインの全体的な制御変数はmode-line-formatである。
この変数の値は、モードラインの内容を制御するモードライン用の構造体です。すべてのバッファにおいて、常にバッファローカルとなります。
バッファでこの変数を nil
に設定すると、そのバッファにはモードラインが表示されません。(高さが1行しかないウィンドウでも、モードラインは表示されません。)
mode-line-format のデフォルト値は、mode-line-position や mode-line-modes といった他の変数の値(これらはさらに mode-name や minor-mode-alist
という変数の値を組み込んでいます)を利用するように設計されています。mode-line-format
自体を変更する必要があるモードはごくわずかです。ほとんどの場合、mode-line-format
が直接的または間接的に参照している変数の一部を変更するだけで十分です。
mode-line-format
自体を変更する場合、新しい値にはデフォルト値に含まれる変数をそのまま使用すべきであり(モードラインで使用される変数を参照)、その内容を重複させたり、別の形式で情報を表示したりすべきではありません。これにより、ユーザーや
Lisp プログラム(display-time
やメジャーモードなど)がこれらの変数を変更して行ったカスタマイズが、引き続き有効に維持されます。
Shellモードで有用と思われるmode-line-formatの仮想的な例を以下に示します(実際には、Shellモードではmode-line-formatは設定されません):
(setq mode-line-format (list "-" 'mode-line-mule-info 'mode-line-modified 'mode-line-frame-identification "%b--"
;; Note that this is evaluated while making the list. ;; It makes a mode line construct which is just a string. (getenv "HOST")
":"
'default-directory
" "
'global-mode-string
" %[("
'(:eval (format-time-string "%F"))
'mode-line-process
'minor-mode-alist
"%n"
")%]--"
'(which-function-mode ("" which-func-format "--"))
'(line-number-mode "L%l--")
'(column-number-mode "C%c--")
'(-3 "%p")))
(変数 line-number-mode、column-number-mode、which-function-mode
により、特定のマイナーモードが有効になります。通常どおり、これらの変数名はマイナーモードのコマンド名でもあります。)