0

私はちょうどemacsモードで遊んで始めました。text-modeさまざまな状況で単純な色の変更を行う派生モード (から) を作成しました。たとえば、すべて等号 ( =) の行の上のテキストはマゼンタに変わります。これは、次のコードを使用して行われます。

(make-face 'heading-face1)
(set-face-foreground 'heading-face1 "brightmagenta")
(set-face-attribute 'heading-face1 nil :weight 'ultra-bold)                                                                                                                                                           
(setq font-lock-heading-face1 'heading-face1)

(font-lock-add-keywords nil '(("\\(.*\n=\\{5,\\}.*\\)"
                           1 font-lock-heading-face1 prepend)))

そのようなテキストを含むファイルを最初に開くと、適切に色付けされます。しかし、余分な を追加する=か、新しい行を作成する=============と、通常のテキストの色に変わります。

他のフォントロック動的に機能します。たとえば、数字はすぐに別の色を使用します...

ファイルが最初に開かれたときとは異なる方法でパターンが動的に一致する原因は何ですか?

4

2 に答える 2

2

あなたが直面している問題は、複数行のキーワードを処理するときに font-lock に特別な注意が必要なことです。

ファイルを最初に開いたとき、font-lock はかなり大きなブロック (~500bytes IIRC) で強調表示を行いますが、バッファーが何らかの方法で変更された後、font-lock はデフォルトで最適化のために行ごとにのみ再強調表示します、つまり、見出し行を考慮する場合、その作業領域には、一致を実行する次の行さえ含まれません。

簡単な修正はfont-lock-extend-region-functions、特別な={5,}.*行が領域の最初の行または領域の後の最初の行のいずれかである場合、再強調表示領域を拡張するフックを追加することです。これが唯一の (そしておそらく最適な) 方法ではありませんが、うまくいくはずです。

詳細については、EmacsLisp マニュアルのMultiline Font Lock Constructsセクションを参照してください。

于 2013-10-27T23:26:00.013 に答える