Next: , Previous: Faces, Up: Frames


15.14 フォントロックモード

フォントロック(font-lock)モードはマイナモードです。 特定のバッファにつねにローカルであり、 編集しているテキストの構文に従ってさまざまなフェイスを 使って強調表示(または『フォント表示化』)します。 このモードは、ほとんどの言語のコメントや文字列を認識できます。 いくつかの言語では、他のさまざまな重要な構成要素も認識し、 正しく強調表示します。 たとえば、定義されている関数名や予約語です。

コマンドM-x font-lock-modeは、 引数に従ってフォントロック(font-lock)モードをオン/オフし、 引数がなければモードをトグルします。 関数turn-on-font-lockは、 フォントロック(font-lock)モードを無条件でオンにします。 このコマンドは、モードフック関数で使うと便利です。 たとえば、Cのファイルを編集しているときにはいつでも フォントロック(font-lock)モードをオンにするには、 つぎのようにします。

     (add-hook 'c-mode-hook 'turn-on-font-lock)

フォントロック(font-lock)モードを扱える すべての(メジャー)モードで自動的にフォントロック(font-lock)モードを オンにするには、 関数global-font-lock-modeをつぎのように使います。

     (global-font-lock-mode 1)

フォントロック(font-lock)モードでは、 テキストを編集していると、自動的に変更した行の強調表示を更新します。 ほとんどの変更は、後続行の強調表示には影響しませんが、 時折、影響することもあります。 ある範囲の行を強調表示し直すには、コマンドM-g M-gを使います (font-lock-fontify-block)。

ある種のメジャーモードでは、M-g M-gは、 現在の関数定義全体をフォント表示化し直します。 (変数font-lock-mark-block-functionは、 現在の関数定義の探し方を制御する。) 別のメジャーモードでは、 M-g M-gは、 ポイントのまえとあとの16行をフォント表示化し直します。

数引数nを指定すると、M-g M-gは、 モードに関係なく、 ポイントのまえとあとのn行をフォント表示化し直します。

フォントロック(font-lock)モードの利点を十分に活用するには、 ボールド体、イタリック体、ボールドイタリック体のデフォルトフォントを 選ぶ必要があります。 あるいは、カラーやグレースケールの画面が必要です。

変数font-lock-maximum-decorationは、 複数のレベルを提供するモードでのフォント表示化の好ましいレベルを指定します。 レベル1は最低限のフォント表示化です。 いくつかのモードでは、もっとも高い3のレベルまであります。 通常デフォルトは『可能な限り大きい数』です。 すべてのモードに適用する整数を指定できます。 あるいは、特定のメジャーモードに対して異なる数を指定できます。 たとえば、C/C++モードではレベル1を、 それ以外ではデフォルトのレベルを指定するには、つぎのようにします。

     (setq font-lock-maximum-decoration
           '((c-mode . 1) (c++-mode . 1)))

フォント表示化は、大きなバッファに対してはとても遅くなりえますから、 抑制することもできます。 変数font-lock-maximum-sizeにバッファサイズを指定すると、 その値を越えるバッファについてはフォント表示化を抑制します。

コメントと文字列のフォント表示化(あるいは、『構文の』フォント表示化)は、 バッファのテキストの構文解析に頼っています。 速度向上のために、CモードやLispモードを含むいくつかのモードでは、 特別な習慣に頼っています。 最左桁にある開き括弧は、つねに関数定義の開始を表し、 そのため、つねに文字列やコメントの外側だということです。 (see Defuns。) この習慣に従わないと、フォントロック(font-lock)モードは、 文字列やコメントの内側にある最左桁の開き括弧のうしろでは、 違ったフォント表示化をすることもありえます。

変数font-lock-beginning-of-syntax-function (つねにバッファにローカル)は、フォントロック(font-lock)モードが、 コメントや文字列の外側であることが保証される位置を どのように探すかを指定します。 最左桁の括弧の習慣を使うモードでは、 変数のデフォルト値は、beginning-of-defunです。 つまり、フォントロック(font-lock)モードは 習慣を使うようにということです。 この変数にnilを設定すると、 フォントロック(font-lock)モードは、もはや習慣に頼りません。 これでまちがった結果を避けられますが、その代償は、 変更したテキストをフォント表示化するには、 バッファのテキストをバッファの先頭から再走査する必要がある場合もあります。

多くのモードに対するフォントロックの強調表示パターンはすでにありますが、 フォント表示化するパターンを追加したいこともあるでしょう。 関数font-lock-add-keywordsを使って、 特定のモードに対する個人用の強調表示パターンを追加できます。 たとえば、Cのコメントで単語‘FIXME:’を強調表示するには、 つぎのように使います。

     (font-lock-add-keywords
      'c-mode
      '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))