2009-09-16 11 views
8

私はLIMEから現在ロードされているシンボルをすべて取得して解析し、フォントロックでそれらをフォントにすることができるように、SLIMEを少し修正しています。メジャーモードのリロードなしでemacsのフォントロックキーワードを更新する

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

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

UPD:追加された賞金 - 質問はまだ解決していません。メジャーモードをリロードせずにfont-lockキーワードをリロードする方法が必要です。

答えて

5

代わりにこのことについてどのように、[OK]を:

(defun my-font-lock-restart() 
    (interactive) 
    (setq font-lock-mode-major-mode nil) 
    (font-lock-fontify-buffer)) 
+0

素晴らしい、これは動作するようです! – freiksenet

1

メジャーモードをトリガすることは、フォントロックを行うことではありません。私は、SLIMEやLispモードの内部をよく知っているわけではありませんが、変数を設定するだけで動作させるはずです。 font-lock-modeを切り替えると、font-lock-fontify-bufferのように、新しいキーワードを念頭に置いてフォントロックを再開させることができます。

ほとんどの場合、私はcperl-modeをハックしています。これは、内部フォントロック変数を設定するcperl-init-facesとfont-lockの再起動の単純な問題です。 cperl-init-faces;

編集:lisp-interaction-modeを使ったいくつかの実験では、font-lock-modeを再起動しても厳密には必要ないことが明らかになりました。 font-lock-keywordsを変更するだけで、何らかの形でフォントを再トリガーすることができれば十分です。あなたは一時的にモードフック変数をクリアして再起動でき(テキストの編集、フォント・ロック・フォント表示化バッファなど)

+0

これは非常に奇妙です。キーワードを変更するために何を使用しますか?私は "font-lock-add-keywords"を使用します。 – freiksenet

+0

フォントロックの再起動は、たとえばPythonモードでは役に立ちません。 Emacsの私のバージョンでしょうか?あなたはどのバージョンを持っていますか?私はx86-64 UbuntuにGNU Emacs 23.1.50.1を持っています。 – freiksenet

1

(defun my-restart-lisp-mode() 
    (interactive) 
    (let ((lisp-mode-hook nil)) 
    (normal-mode))) 
+0

クール、これを試してみましょう。 デフォルトで記述されているjrockwayのように動作しないのはなぜですか? – freiksenet

+0

これは良いですが、これはスライムフックを含むすべてのフックを無効にします。これはうまくいかない:それはモードを再起動することなく。 – freiksenet

関連する問題