mode-line-format は、(カレントバッファの)モードライン表示に用いるテンプレート を保持する、バッファローカル変数です。同じバッファ用のウィンドウは(全て) 同じ mode-line-format を用い、そのモードラインは (たぶん、そのポジションフィールド を除いて) 同じように表示されます。モードラインは、 (バッファの名前、対応する ファイル、リカーシブエディティングの深さ、そしてもちろんそのバッファのメジャー モードとマイナーモードといった)そのバッファに関する情報を持ちます。
mode-line-format や default-mode-line-format を変更する必要のあるモードは、非 常に少数です。ほとんどの場合、mode-line-format で参照される変数を変更するだけ で十分です。
モードラインは(通常)バッファを変更する際、 (常に)アップデートされます。 mode-line-format で参照される変数(のいずれか)を変更した後、 (その新しい 情報を表示するため)モードラインのアップデートを行なわせたいわけですが、 (set-buffer-modified-p (buffer-modified-p))を呼び出すことでそれを行なう ことができます。
Variable: mode-line-format
mode-line-format の値は list か cons cell か symbol か string です。 もしlist なら、その要素が list か cons cell か symbol か string かも しれません。
SYMBOL は、t でも nil でも void でもない時、その値が用いられます (どのよう に??)。シンボルの値がストリングの場合、...
(SYMBOL THEN ELSE) は、そのシンボルの値が存在し、それが non-nil の場合、そのリストの 2番目 の要素がリカーシブに処理されます。しかし、シンボルの値が nil の場合、 (それが存在すれば) リストの 3番目の要素がリカーシブに処理されます。この ように、この構成は conditional です。
(STRING REST...) or (LIST REST...) は、各要素がリカーシブに処理されその結果が繋げ (訳注:concatenate)ら れます。
(WIDTH REST...) は、リストの残りが処理され、そのデータの右端が指定された数の幅まで、 (それが正の場合)空白でフィルされ、(それが負の場合)切り詰められます。
STRING % の後の 10進 digits は右端における空白のフィリングを指定します。
%b バッファ名を表示する (bufer-name 参照)。
%f visit されたファイルの名前を表示する (buffer-file-name 参照)。
%* バッファが変更された場合 `*' を表示する (buffer-modified-p 参照)。 そうでない場合 `-' を表示する。 バッファがリードオンリーの場合`%'を表示する(buffer-read-only 参照)。
%s プロセスの状態を表示する (process-status 参照) (古い??)。
%p ウィンドウの上にあるバッファのパーセントや Top や Bottom や All を 表示する。
%n narrow view が表示されている場合 Narrow を表示する (narrow-to-region 表示)。
%[ リカーシブエディティングレベルごとに `[' を 1つ表示する。`%]'も同様。
%% % を表示する
%- テンプレートの残りの部分を無視し - の表示で 行の残りの部分をフィルす る。
次の 2種類の %-constructs はまだサポートされていますが、変数 mode-name と変数global-mode-string を直接用いることで同じことができるため、古くな ってしまったものです。
%m mode-name の値を表示する。 %M global-mode-string の値を表示する。
Variable: default-mode-line-format
この変数は、(それを上書きしない)バッファ用のデフォルトの mode-line-format を持ちます。これは (default-value 'mode-line-format) と同じです。
(list "" 'mode-line-modified 'mode-line-buffer-identification " " 'global-mode-string " %[(" 'mode-name 'minor-mode-alist "%n" 'mode-line-process ")%]----" '(-3 . "%p") "-%-"))
Variable: mode-line-buffer-identification
表示されているバッファを示すモードラインコントロール。デフォルト値は `Emacs:%17b'。通常のファイル以外のものをエディットするメジャーモードは、こ れを変更します(e.g. Info, Dired,...)
Variable: mode-line-modified
この変数は、カレントバッファが変更されたか否かを示すモードラインコントロー ルを持ちます。 (フォーマットを記述する!!) デフォルト値は ("--%1*%1*-") で す。この変数を変更しても、モードラインのアップデートを強制することにはなり ません。
Variable: global-mode-string
この変数は、この変数が mode-line-format (デフォルト) に含まれるか、`%M' specification に含まれる場合(モードラインに)表示されるストリングを持ちま す。現在は display-time のみが global-mode-string を変更します。
Variable: minor-mode-alist
この変数は、"(モードラインにおいて)どのようにマイナーモードの activation を示すか" を指定する association リストを持ちます。リストの各要素は (variable string) という形をしています(訳注:??)。 variable の値が non-nil
の場合、 string がモードラインに含まれます。しかしこの逆はありません。変数 のテスト結果が nil もしくは void である限り、 (そのマイナーモードが active でなくても) 新しい要素をこのリストに追加しても安全です。
minor-mode-alist は、(通常)バッファローカルではありません。 alist 中の変数 は(たぶん)バッファローカルであるべきでしょう。
パッケージをロードしたりマイナーモードを activate する際 alist への追加(訳 注: augment)を行なう安全な方法の例を示します。これは、ある要素が 2 回以上 追加されてしまうことを防ぎます。
(or (assq 'leif-mode minor-mode-alist) (setq minor-mode-alist (cons '(leif-mode " Leif") minor-mode-alist)))
minor-mode-alist のデフォルト値は標準のマイナーモードを持ちます。(このスト リングにおいて)スペース文字が前に置かれてある点に注意して下さい。
((abbrev-mode " Abbrev") (overwrite-mode " Ovwrt") (auto-fill-hook " Fill") (defining-kbd-macro " Def"))