メジャーモードにたいして検索ベースフォント表示ルールを追加するためにfont-lock-add-keywords
、削除にはfont-lock-remove-keywords
を使用することができます。特定の条件にマッチするキーワードにたいして選択的にフォント表示を無効にするよう、font-lock-ignore
オプションをカスタマイズすることもできます。
この関数はカレントバッファー、またはメジャーモードmodeにたいしてハイライトするkeywordsを追加する。引数keywordsは変数font-lock-keywords
と同じ形式のリストであること。
modeが、c-mode
のようにメジャーモードのコマンド名であるようなシンボルなら、そのmode内でFont
Lockモードを有効にすることによってkeywordsがfont-lock-keywords
に追加される効果がある。非nil
値のmodeによる呼び出しは~/.emacsファイル内でのみ正しい。
modeがnil
なら、この関数はカレントバッファーのfont-lock-keywords
にkeywordsを追加する。この方法でのfont-lock-add-keywords
呼び出しは通常はモードフック関数内で使用される。
デフォルトではkeywordsはfont-lock-keywords
の先頭に追加される。オプション引数howがset
なら、それらはfont-lock-keywords
の値の置換に使用される。howがそれ以外の非nil
値なら、これらはfont-lock-keywords
の最後に追加される。
追加のハイライトパターンの使用を可能にする、特別なサポートを提供するモードがいくつかある。それらの例については変数c-font-lock-extra-types
、c++-font-lock-extra-types
、java-font-lock-extra-types
を参照のこと。
警告:
メジャーモードコマンドはモードフックを除き、いかなる状況においても直接間接を問わずfont-lock-add-keywords
を呼び出してはならない(これを行うといくつかのマイナーモードは不正な振る舞いを起こしかねない)。メジャーモードコマンドはfont-lock-keywords
をセットすることにより、検索ベースフォント表示のルールをセットアップすること。
この関数はカレントバッファーやメジャーモードmodeにたいして、font-lock-keywords
からkeywordsを削除する。font-lock-add-keywords
の場合と同様にmodeはメジャーモードコマンド名かnil
であること。この関数にもfont-lock-add-keywords
にたいするすべての制約と条件が適用される。引数keywordsは対応するfont-lock-add-keywords
が使用するキーワードと正確に一致しなければならない。
たとえば以下はCモードに2つのフォント表示パターンを追加するコードの例である。フォント表示の1つはたとえコメント内であろうとも単語‘FIXME’をフォント表示し、もう1つは‘and’、‘or’、‘not’をキーワードとしてフォント表示する。
(font-lock-add-keywords 'c-mode '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend) ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))
この例は厳密にCモードだけに効果がある。Cモード、およびその派生モードにたいして同じパターンを追加するには、かわりに以下を行う:
(add-hook 'c-mode-hook (lambda () (font-lock-add-keywords nil '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend) ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))))
このオプションは特定のFont
Lockキーワードによってフォント表示を選択的に無効にするための条件を定義する。非nil
なら、値は以下のような形式の要素からなるリストであること:
(symbol condition ...)
ここでsymbolはシンボル(通常はメジャーモードかマイナーモード)。symbolの後のリスト要素conditionはsymbolがバインドされていて、なおかつ値が非nil
なら効力をもつ。あるモードのシンボルについて考えると、カレントのメジャーモードがそのモードの派生モードであること、あるいはバッファーでそのマイナーモードが有効であることを意味する。conditionが効力をもつ間は要素font-lock-keywords
に因をなすすべてのフォント表示は、conditionがマッチした場合には無効化される。
conditionにはそれぞれ以下のいずれかを指定できる:
この条件はそのシンボルを参照するFont
Lockキーワード要素すべてにマッチする。通常はフェイスだが、font-lock-keywords
リストの要素によって参照される任意のシンボルを指定できる。シンボルにはワイルドカードを含めることができる。*
はシンボルの名前に含まれる任意の文字列にマッチ、?
は1文字にマッチ、そして[char-set]
(char-setは1文字以上の文字列はその文字セットの1文字にマッチする。
この条件はmatcherが文字列にマッチするregexpであるようなFont Lockキーワード要素すべてにマッチする。言い換えると、これはその文字列をハイライトさせるようなFont Lockルールにマッチする条件である。したがってこの文字列に、ハイライトを無効にしたい特定のプログラムキーワードを指定できるかもしれない。
(pred function)
この条件は、その要素を引数としてfunctionを呼び出した際に非nil
がリターンされるようなFont
Lockキーワード要素すべてにマッチする。
(not condition)
これはconditionが成り立たなければマッチする。
(and condition …)
これはすべてのconditionがマッチすればマッチする。
(or condition …)
これは少なくとも1つのconditionがマッチすればマッチする。
(except condition)
この条件はトップレベルかor
節内だけで使用できる。同一レベルにおいて前にマッチした条件の効果を取り消す。
セッティングの例として以下を考えてみましょう:
(setq font-lock-ignore '((prog-mode font-lock-*-face (except help-echo)) (emacs-lisp-mode (except ";;;###autoload)") (whitespace-mode whitespace-empty-at-bob-regexp) (makefile-mode (except *))))
これは1行ごとに以下のことを行っています:
help-echo
に追加を行うキーワードはすべて保持。
whitespace-mode
(マイナーモード)が有効なら、バッファー先頭の空行もハイライトさせない。