So passen Sie die Syntaxhervorhebung für einen bestimmten Modus an

10

Ich möchte die Syntaxhervorhebung in meinem ändern, lua-mode.elohne andere Hauptmodi zu beeinflussen.

Nur als Beispiel, würde ich „Schlüsselwörter“ wie gefällt if, then, elsefett gedruckt und blaue Schrift zu sein , wenn in lua-mode(anstelle des Standard - rosa) , ohne den gleiche Markierung Stil, während eine Bearbeitung .texDatei mit AUCTeX.

Bisher habe ich versucht, den folgenden Code in meinen .emacsund dann auch in meinen zu setzen 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")))))

Auf diese Weise erhalte ich für jeden Modus, mit dem ich arbeite, die gleiche Syntaxhervorhebung.

Diese Frage könnte verwandt sein: Syntaxhervorhebung ändern, ohne den Hauptmodus zu ändern?

Gibt es eine (hoffentlich einfache und allgemeine) Möglichkeit, dies zu tun?

Pier Paolo
quelle

Antworten:

8

Gesichter sind global, daher ändert sich ihre Attribute überall, wie Sie bemerkt haben. Um es lokal zu ändern, erstellen Sie eine Kopie des Gesichts, ändern Sie die Attribute in der Kopie und setzen Sie dann mit einem Modus-Hook das alte Gesicht lokal pro Puffer auf die Kopie. Das folgende Beispiel macht es für font-lock-comment-face, aber die gleiche Beschwörung funktioniert für jedes Gesicht.

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