Как настроить подсветку синтаксиса только для данного режима

10

Я хотел бы изменить подсветку синтаксиса в моем, lua-mode.elне затрагивая другие основные режимы.

Просто в качестве примера, я хотел бы «ключевые слова» , как if, then, elseбыть выделены жирным шрифтом и синим шрифтом , когда в lua-mode(вместо розового по умолчанию) , не имея один и тот же стиль выделения при редактировании .texфайла с AucTeX.

До сих пор я пытался поместить следующий код в мой, .emacsа затем и в мой 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")))))

но таким образом я получаю одинаковую подсветку синтаксиса для каждого режима, с которым я работаю.

Этот вопрос может быть связан: Изменить подсветку синтаксиса без изменения основного режима?

Есть ли (надеюсь, простой и общий) способ сделать это?

Пьер Паоло
источник

Ответы:

8

Лица являются глобальными, поэтому изменение их атрибутов в любом месте меняет их везде, как вы заметили. Чтобы изменить его локально, сделайте копию лица, измените атрибуты в копии и затем используйте ловушку режима, чтобы локально установить старое лицо на копию для каждого буфера. Пример ниже делает это для font-lock-comment-face, но то же самое заклинание будет работать для любого лица.

(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
источник