8

私はSLIMEに小さな変更を加えているので、Lispから現在ロードされているすべてのシンボルを取得し、それらを分析して、font-lockでフォント化することができます。

私はこれらすべてのステップをなんとか実行できましたが、小さな問題があります-フォントロックでキーワードリストが変更された場合、メジャーlispモードを再起動しない限りバッファは更新されません。キーワードを更新するたびにlisp-modeを再起動したくありません。これは、ファイルを初めてロードするときにのみ実行したいlisp-modeのフックがいくつかあるためです。

font-lockを更新して、新しいキーワードをすべて読み取り、それに応じてバッファーをフォント化する他の方法はありますか?フォントロックをオフにして使用font-lock-fontify-bufferしても、うまくいきません。

UPD:バウンティを追加しました-質問はまだ残っています。メジャーモードをリロードせずにfont-lockキーワードをリロードする方法が必要です。

4

3 に答える 3

5

わかりました、代わりにこれはどうですか:

(defun my-font-lock-restart ()
  (interactive)
  (setq font-lock-mode-major-mode nil)
  (font-lock-fontify-buffer))
于 2009-09-18T15:18:25.060 に答える
2

モード フック変数を一時的にクリアして、再起動することができます。

(defun my-restart-lisp-mode ()
  (interactive)
  (let ((lisp-mode-hook nil))
    (normal-mode)))
于 2009-09-16T17:31:30.683 に答える
1

メジャーモードをトリガーすることは、font-lock を機能させるものではありません。私は SLIME や Lisp モードの内部構造に詳しくありませんが、変数を設定するだけで動作するはずです。font-lock-mode を切り替えると、font-lock が新しいキーワードを念頭に置いて再フォント化を開始しますfont-lock-fontify-buffer

ほとんどの場合、cperl-mode をハックしますが、cperl-init-faces(内部の font-lock 変数を設定する) 簡単な問題で、font-lock を再起動します。cperl-init-faceslisp-mode は;)への呼び出しを必要としないことを除けば、あまり変わらないはずです。

編集: lisp-interaction-mode のいくつかの実験により、font-lock-mode を再起動することさえ厳密には必要ないことが明らかになりました。なんらかの方法でフォント化を再トリガーする限り、font-lock-keywords を変更するだけで十分です。(テキストの編集、font-lock-fontify-buffer など)

于 2009-09-16T09:12:24.193 に答える