font-lock-defaults로 사용자 정의면을 어떻게 지정합니까?


11

기존면을 사용하여 글꼴 잠금 키워드를 정의하면 'foo'문자열을 강조 표시 할 수 있습니다.

(defconst my-mode-font-lock-keywords
  (list
   (cons "foo" 'font-lock-type-face)))

(define-derived-mode my-mode fundamental-mode "My mode"
  "A demo mode."
  (set (make-local-variable 'font-lock-defaults) '(my-mode-font-lock-keywords)))

이것은 올바르게 강조 표시됩니다.

foo가 올바르게 강조 표시됨

그러나 내 얼굴을 정의하면 :

(defface my-mode-foo-face
  '((t :inherit font-lock-preprocessor-face))
  "Face for highlighting 'foo'.")

(defconst my-mode-font-lock-keywords
  (list
   (cons "foo" 'my-mode-foo-face)))

(define-derived-mode my-mode fundamental-mode "My mode"
  "A demo mode."
  (set (make-local-variable 'font-lock-defaults) '(my-mode-font-lock-keywords)))

강조 표시가 적용되지 않습니다.

강조 표시 안함

font-lock-defaults내가 정의한 얼굴로 어떻게 사용할 수 있습니까?

답변:


8

C-hv가치의 가치를 살펴보면 font-lock-type-face단지 상징 일뿐 font-lock-type-face입니다. 이제의 C-hv값을보십시오 my-mode-foo-face. 아뇨! 당신은 할 수 없습니다! 변수가 아닙니다!

얼굴에 접근하려면 변수가 필요합니다. 선언 foo-face의 얼굴은 선언하지 않은 foo-face변수를.

(defvar my-mode-foo-face 'my-mode-foo-face)얼굴 정의를 추가 한 다음 글꼴 잠금을 사용하면 my-mode-foo-facevar를 사용하여 my-mode-foo-face얼굴 에 액세스 할 수 있습니다 . 혼란 스럽습니다.


편집 : font-lock.el의 말에 따라 더 나은 해결책이있는 것 같습니다.

;; Originally these variable values were face names such as `bold' etc.
;; Now we create our own faces, but we keep these variables for compatibility
;; and they give users another mechanism for changing face appearance.
;; We now allow a FACENAME in `font-lock-keywords' to be any expression that
;; returns a face.  So the easiest thing is to continue using these variables,
;; rather than sometimes evalling FACENAME and sometimes not.  sm.

;; Note that in new code, in the vast majority of cases there is no
;; need to create variables that specify face names.  Simply using
;; faces directly is enough.  Font-lock is not a template to be
;; followed in this area.

키워드에서 얼굴을 이중 인용하는 Wilfred의 솔루션 일 수 있습니다.


3
아하, 그래서 변수를 기대하고 있습니다. (cons "foo" ''my-mode-foo-face))또한 작동하지만 어느 것이 관용인지 잘 모르겠습니다.
Wilfred Hughes

1
흠, 내 대답은 내가에서 읽고 있어요 내용에 따라 문제의 구식 솔루션이 될 것 같다font-lock.el
조던 Biondo

3
실제로 평가할 표현을 기대하고 있습니다. 거기에 논리를 넣을 수도 있습니다.
Dmitry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.