Como personalizar o destaque da sintaxe apenas para um determinado modo

10

Gostaria de alterar o destaque da sintaxe no meu lua-mode.elsem afetar outros modos principais.

Apenas como exemplo, eu gostaria "palavras-chave" como if, then, elsepara estar em negrito e azul quando em lua-mode(em vez do rosa default) sem ter o mesmo estilo de destaque durante a edição de um .texarquivo com AUCTeX.

Até agora, tentei colocar o seguinte código no meu .emacse também no meu 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")))))

mas dessa maneira recebo o mesmo destaque de sintaxe para todos os modos com os quais trabalho.

Esta pergunta pode estar relacionada: Alterar o destaque da sintaxe sem alterar o modo principal?

Existe uma maneira (espero que simples e geral) de fazer isso?

Pier Paolo
fonte

Respostas:

8

As faces são globais, portanto, mudar seus atributos em qualquer lugar muda em qualquer lugar, como você notou. Para alterá-lo localmente, faça uma cópia da face, altere os atributos na cópia e use um gancho de modo para definir localmente a face antiga para a cópia em uma base por buffer. A amostra abaixo faz isso font-lock-comment-face, mas o mesmo encantamento funciona para qualquer rosto.

(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
fonte