Next: , Previous: Mode Line Format, Up: Mode Line Format


22.3.1 モード行のデータ構造

モード行の内容は、バッファローカルな変数mode-line-formatに 保持されたリスト、文字列、シンボル、数から成るデータ構造で制御されます。 このデータ構造をモード行構成(mode line construct)と呼びます。 これは単純なモード行構成から再帰的に構築します。 同じデータ構造はフレームタイトル(see Frame Titles)を 構築するためにも使われます。

— Variable: mode-line-format

この変数の値は、モード行全体の書式に責任を持つモード行構成である。 この変数の値は、モード行のテキストを作るためにどの変数を使うか、 それらはモード行のどこに現れるかを制御する。

モード行構成は、定まったテキストの文字列のように単純でもかまいませんが、 普通は、テキストを作るための別の変数の使い方を指定します。 それらの変数の多くはそれ自身、それらの値として モード行構成を持つように定義されています。

mode-line-formatのデフォルト値は、 mode-nameminor-mode-alistなどの変数の値を使います。 多くの目的には、mode-line-formatが参照するいくつかの変数を 変えるだけで十分です。

モード行構成は、リスト、シンボル、文字列のいずれかです。 その値がリストであれば、その各要素はリスト、シンボル、文字列のいずれかです。

string
モード行構成としての文字列は、 %記法を除いて、モード行にそのまま表示される。 ‘%’のうしろの10進数は、右側に空白を埋める (つまりデータは左端に揃えられる)ときのフィールド幅を指定する。 see %-Constructs
symbol
モード行構成としてのシンボルは、その値を表す。 symbolの値は、symbolのかわりにモード行構成として使われる。 しかし、tnilのシンボル、および、シンボルの値が空のものは 無視する。

例外が1つある: symbolの値が文字列であると、%記法を処理せずに 文字列をそのまま表示する。

(string rest...) or (list rest...)
最初の要素が文字列かリストであるリストは、 すべての要素を再帰的に処理し、結果を連結することを意味する。 これはもっとも多用されるモード行構成の形である。
(symbol then else)
最初の要素がシンボルであるリストは条件節であり、 その意味はsymbolの値に依存する。 その値がnil以外であると、 2番目の要素thenをモード行構成として再帰的に処理する。 symbolの値がnilであると、 3番目の要素elseをモード行構成として再帰的に処理する。 elseは省略してもよいが、その場合、 symbolの値がnilであるところの要素はモード行に表示されない。
(width rest...)
最初の要素が整数であるリストは、 restの結果の切り詰めや引き伸しを指定する。 残りの要素restはモード行構成として再帰的に処理され連結される。 (widthが正であれば)結果の右端に空白を追加したり、 (widthが負であれば)結果を(−width幅に) 右端から切り詰める。

たとえば、ウィンドウの上端より上にバッファの何割があるかを表示するには、 (-3 "%p")のようなリストを使う。

読者がmode-line-format自体を変更するときには、 新しい値では、デフォルト値(see Mode Line Variables)に現れる ものと同じ変数を使い、それらの値をコピーして使ったり、 別の書式で情報を表示したりしないでください。 こうしておけば、それらの変数に対する変更を介した ユーザーや(display-timeやメジャーモードなどの)Lispプログラムが行った カスタマイズが効果を発揮できます。

ホスト名やデフォルトディレクトリを含んだ shell-modeに有用なmode-line-formatの例を示します。

     (setq mode-line-format
       (list "-"
        'mode-line-mule-info
        'mode-line-modified
        'mode-line-frame-identification
        "%b--"
     
     
        ;; リストを作るときに評価されることに注意
        ;; 単なる文字列のモード行構成を作る
        (getenv "HOST")
        ":"
        'default-directory
        "   "
        'global-mode-string
        "   %[("
        'mode-name
        'mode-line-process
        'minor-mode-alist
        "%n"
        ")%]--"
        '(which-func-mode ("" which-func-format "--"))
        '(line-number-mode "L%l--")
        '(column-number-mode "C%c--")
        '(-3 . "%p")
        "-%-"))

(変数line-number-modecolumn-number-modewhich-func-modeは特定のマイナモードをオンにする。 通常どおり、これらの変数の名前はマイナモードコマンドの名前でもある。)