2017-12-11 4 views
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을 입력하고 M-x font-lock-mode을 두 번 입력하면 효과가 있습니다. 처음으로 글꼴 잠금 모드를 두 번째로 시작하지 않습니다. 그러나 버퍼는 여전히 버퍼가 있던 모드를 표시하기 때문에 현재는 주요 모드로 실행되지 않습니다. 좋아, 그래서 함수가 일부 값을 설정하고 모드가 다시 시작되면 적용됩니다 같아요. 글꼴 잠금 모드에 후크를 추가해야 할 수도 있습니다.

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

아니요 ... 아무 것도하지 않습니다. 함수가 작동하려면 폰트 잠금 모드를 다시 시작하지 않아도 되려면 어떻게해야합니까?

여기에서이 기능을 가져 와서 일부 수정했습니다. 정말 내게 많은 도움이되지 않습니다 그 정의 및 글꼴 잠금에 대한 문서의 대부분을 이해하지 않습니다

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

+0

font-lock-mode hook이 아닌 major-mode hook에 font-lock 기능을 추가하는 방법은 어떻습니까? – 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. 그렇지 않으면, 두 번 글꼴이 발생하지 않도록 모드의 글꼴 규칙을 수정해야한다고 생각합니다. 나는 그것에 대해 확신하지 못한다. 더 깊이 파고들 필요가있다. – jenesaisquoi

+1

또한 모드의 글꼴 잠금을 영구히 변경하려면 모드의 config에서'font-lock-add-keywords '모드를 사용하십시오.이 글꼴을 함수에 포함 할 필요가 없습니다 – jenesaisquoi

관련 문제