Jak dostosować podświetlanie składni tylko dla danego trybu

10

Chciałbym zmienić podświetlanie składni w moim, lua-mode.elbez wpływu na inne główne tryby.

Tylko jako przykład, chciałbym „słowa kluczowe” jak if, then, elseaby być pogrubioną czcionką i niebieskim, gdy w lua-mode(zamiast domyślnego różu) bez konieczności ten sam styl podświetlania podczas edycji .texpliku z AUCTeX.

Do tej pory próbowałem umieścić następujący kod w moim, .emacsa następnie także w moim lua-mode.el:

(custom-set-faces
  '(font-lock-builtin-face ((t (:foreground "maroon3"))))
  '(font-lock-comment-face ((t (:foreground "green4"))))
  '(font-lock-keyword-face ((t (:foreground "dark blue" :weight bold))))
  '(font-lock-string-face ((t (:foreground "dark cyan")))))

ale w ten sposób otrzymuję tę samą podświetlanie składni dla każdego trybu, z którym pracuję.

To pytanie może być powiązane: zmienić podświetlanie składni bez zmiany trybu głównego?

Czy istnieje (miejmy nadzieję prosty i ogólny) sposób, aby to zrobić?

Pier Paolo
źródło

Odpowiedzi:

8

Twarze są globalne, więc zmiana atrybutów w dowolnym miejscu zmienia to wszędzie, jak zauważyłeś. Aby zmienić ją lokalnie, wykonaj kopię twarzy, zmień atrybuty w kopii, a następnie użyj zaczepu trybu, aby lokalnie ustawić starą twarz na kopię na podstawie bufora. Poniższa próbka to robi font-lock-comment-face, ale ta sama inkantacja będzie działać dla każdej twarzy.

(make-variable-buffer-local 'font-lock-comment-face)
(copy-face 'font-lock-comment-face 'lua-comment-face)
(set-face-foreground 'lua-comment-face "green4")

(add-hook 'lua-mode-hook
          (lambda ()
            (setq font-lock-comment-face 'lua-comment-face)            
            ))
erikstokes
źródło