2017-12-11 8 views
1

フォントロックモードの使用方法が混乱しています。​​にフォントロックモードを起動する声明はありませんが、それは常にマイナーモードとして実行されるようです。さらに、私は以下の機能を持っています:フォントロック機能を使用する関数は、フォントロックモードを再起動する必要があります

(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に続いてM-x font-lock-modeを2回実行すると有効になります。初めてフォントロックモードを無効にします。しかし、バッファは以前のバッファのモードを表示するので、現在はメジャーモードでは動作していません。さて、私は関数がいくつかの値を設定し、モードが再起動すると有効になると思います。フォントロックモードにフックを追加する必要があるかもしれません。

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

いいえ...何もしません。関数が機能するためにフォントロックモードを再起動する必要がないためには、何をする必要がありますか?

ここからその機能を取得して一部変更しました。私は本当に多くの私を助けていない、その定義やフォントロックのドキュメントのほとんどを理解していない:

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

+0

フォントロックモードのフックではなく、メジャーモードのフックにフォントロック機能を追加することはどうですか? – lawlist

+0

私もそれを試みました、私はまだフォントロックモードを再起動する必要があります。私は '(add-hook 'haskell-mode' testregexfunc)'を試みましたが、同じことです。 –

答えて

2

私はあなたが探している機能は、一緒にバッファのfont-を宣言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 
+0

よろしくお願いいたします。これにより、手動でフォントロックモードを再起動する問題が修正されました。特定のメジャーモードに参加したら、この機能を実行するために必要なことを教えてもらえますか?私はまだそれをフックに入れても、手動で関数を呼び出す必要があります...例えば、haskellモードです。 –

+1

簡単なラウンドアバウトソリューションは、マイナーモードを定義し、メジャーモードフックで有効にします。 https://github.com/ludwigpacifici/modern-cpp-font-lock/blob/master/modern-cpp-font-lock.el#L329。さもなければ、私はあなたが2回起こっているフォント化を避けるためにモードのフォント化規則を変更する必要があると思います。私はそれについて確かではない、それはより深く掘り下げることを必要とするだろう。 – jenesaisquoi

+1

また、あなたのモードの設定で 'font-lock-add-keywords 'mode'を使うモードのフォントロックを永久に変更したいのであれば、それを関数にラップする必要はありません – jenesaisquoi

関連する問題