Come personalizzare l'evidenziazione della sintassi solo per una determinata modalità


10

Vorrei cambiare l'evidenziazione della sintassi nella mia lua-mode.elsenza influire su altre modalità principali.

Per fare un esempio, mi piacerebbe "parole chiave", come if, then, elsedi essere in grassetto e blu quando è in lua-mode(al posto del colore rosa default) senza avere lo stesso stile di evidenziazione durante la modifica di un .texfile con AUCTeX.

Finora ho provato a inserire il seguente codice nel mio .emacse poi anche nel mio 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")))))

ma in questo modo ottengo la stessa evidenziazione della sintassi per ogni modalità con cui lavoro.

Questa domanda potrebbe essere correlata: modificare l'evidenziazione della sintassi senza cambiare la modalità principale?

C'è un modo (si spera semplice e generale) per farlo?

Risposte:


8

I volti sono globali, quindi cambiando i suoi attributi ovunque lo cambia ovunque, come hai notato. Per modificarlo localmente, crea una copia del volto, modifica gli attributi nella copia e quindi usa un hook di modalità per impostare localmente il vecchio volto sulla copia in base al buffer. L'esempio seguente lo fa per font-lock-comment-face, ma lo stesso incantesimo funzionerà per qualsiasi faccia.

(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)            
            ))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.