フォントロック(font-lock)モードのカスタマイズにおいて
もっとも重要な変数はfont-lock-keywords
です。
探索に基づく表示方法の選択における探索条件を指定します。
この変数の値は、強調表示するべきキーワードのリストである。 このリストに正規表現を書く場合には注意すること。 貧弱な書き方をしたパターンであると、動作を劇的に遅くする!
font-lock-keywords
の各要素は、
特定のテキストの探し方と
当該テキストをどのように強調表示するか指定します。
フォントロック(font-lock)モードは、
font-lock-keywords
の要素を1つ1つ処理し、
各要素において、それに一致するものすべてを探して処理します。
通常、すでに表示方法を選択済みのテキスト部分については、
それ以降の要素に一致しても表示方法を変えません。
しかし、highlighterの要素overrideを使って、
異なるふるまいを指定できます。
font-lock-keywords
の各要素はつぎのいずれかの形です。
font-lock-keyword-face
を使って強調表示する。
;; 孤立した`foo'の出現は
;; font-lock-keyword-face
で強調表示する。
"\\<foo\\>"
関数regexp-opt
(see Syntax of Regexps)は、
異なる複数個のキーワードに一致する最適な正規表現を
計算するのに有用である。
font-lock-keyword-face
を使って強調表示する。
functionは、探索限界を引数として呼び出される。
みつかればnil
以外を返すとともに
みつけた部分を表すマッチデータを設定する。
(
matcher .
match)
;; `fubar'の各出現の`bar'を
;; font-lock-keyword-face
で強調表示
("fu\\(bar\\)" . 1)
正規表現matcherを作るためにregexp-opt
を使った場合、
matchの値を計算するには
regexp-opt-depth
(see Syntax of Regexps)を使える。
(
matcher .
facename)
;; `fubar'の出現は、fubar-face
の値で
;; 表されたフェイスを使って強調表示
("fubar" . fubar-face)
(
matcher .
highlighter)
(subexp facename override laxmatch)
carのsubexpは、 強調表示すべき一致部分の部分式を指定する整数 (0は一致部分全体を意味する)である。 2番目の要素facenameは、上に述べたようにフェイスを指定する。
highlighterの最後の2つの要素、
overrideとlaxmatchはフラグである。
overrideがt
であると、当該要素は、
font-lock-keywords
のまえの要素で決定済みの
表示方法に優先することを表す。
keep
であると、他の要素では表示方法が決定していない
各文字の表示方法を表す。
prepend
であると、
属性face
の先頭にフェイスfacenameを追加する。
append
であると、
属性face
の末尾にフェイスfacenameを追加する。
laxmatchがnil
以外であると、
matcherで一致したものの中にsubexp番目の部分式が
なくてもエラーとしないことを意味する。
この種の要素とその動作の例を示す。
;; `foo'や`bar'の出現の表示方法がすでに決まっていても ;;foo-bar-face
で強調表示する ;;foo-bar-face
の値はフェイスであること ("foo\\|bar" 0 foo-bar-face t) ;; 関数fubar-match
がみつけた各出現内の最初の部分式を ;;fubar-face
の値が表すフェイスで強調表示する (fubar-match 1 fubar-face)
(
matcher highlighters...)
(eval .
form)
font-lock-keywords
のこの値が
始めて使われたときに評価すべき式である。
その値は、この表にあげた形の1つであること。
警告:
font-lock-keywords
の要素は、
行をまたがって一致するように設計しないこと。
そのような処理は信頼性がない。
font-lock-fontify-buffer
は、行にまたがるパターンを正しく扱えるが、
読者がバッファを編集したときの更新処理では、
一度に1行ずつ処理するために正しく扱えない。