1

フォントロックモードがどのように作動するかについて混乱しています。でフォントロックモードを起動するという記述はありませんが、init.elどうやら常にマイナーモードとして実行されているようです。さらに、次の機能があります。

(defun testregexfunc ()
  (interactive)
  (make-variable-buffer-local 'font-lock-extra-managed-props)
  (add-to-list 'font-lock-extra-managed-props 'invisible)
  (font-lock-add-keywords nil
                          '(("\\(\\[\\)\\([a-zA-Z0-9_]+\\)\\(\\]\\)"
                             (1 '(face nil invisible t))
                             (3 '(face nil invisible t))))))

フォントロック固有のものを使用します。しかし、それは一度だけ有効になり、M-x testregexfuncその後に 2 回続きM-x font-lock-modeます。1 回目はフォント ロック モードを無効にし、2 回目はそれを開始します。しかし、現在はメジャー モードとして実行されていません。これは、バッファーが以前にあったモードを引き続き表示するためです。さて、関数がいくつかの値を設定し、モードが再起動したときにのみ有効になると思います。次のようなフォントロックモードへのフックを追加する必要があるかもしれません。

(add-hook
 'font-lock-mode
 'testregexfunc)

いいえ...何もしません。機能を動作させるためにフォント ロック モードを再起動する必要がないようにするには、どうすればよいですか?

ここからその機能を取得し、いくつか変更しました。私はその定義のほとんどを理解しておらず、フォントロックに関するドキュメントはあまり役に立ちません:

https://emacs.stackexchange.com/questions/28154/using-font-lock-regexp-groups

4

1 に答える 1

2

あなたが探している関数はfont-lock-flushfont-lock-ensure一緒にバッファのフォントロックが古くなっていると宣言し、それを再フォント化すると思います。したがって、次のように関数を変更できます。

(defun testregexfunc (arg)
  "Fontify buffer with new rules. With prefix arg restore default fontification."
  (interactive "P")
  (if arg
      (font-lock-refresh-defaults)      ;restore the defaults for the buffer
    (make-variable-buffer-local 'font-lock-extra-managed-props)
    (add-to-list 'font-lock-extra-managed-props 'invisible)
    (font-lock-add-keywords nil ;make the "[" and "]" invisible
                            '(("\\(\\[\\)\\([a-zA-Z0-9_]+\\)\\(\\]\\)"
                               (1 '(face nil invisible t))
                               (3 '(face nil invisible t)))))
    (font-lock-flush)                   ;declare the fontification out-of-date
    (font-lock-ensure)))                ;fontify the buffer using new rules
于 2017-12-12T22:43:27.373 に答える