Режим Emacs: как указать, что вещь в квадратных скобках должна быть окрашена

Я пишу простой режим emacs. Как мне явно указать, что все вещи, например. квадратные скобки должны быть окрашены. Должно быть что-то вроде этого:

( (if thing is in square brackets) . font-lock-string-face)

person Adobe    schedule 13.09.2011    source источник


Ответы (3)


Я предполагаю, что вы пишете основной режим, но font-lock-add-keywords работает и в второстепенных режимах. Ознакомьтесь с его документацией с помощью C-h f RET font-lock-add-keywords.

(define-derived-mode my-mode text-mode "mymode"
  ;; some init code
  (font-lock-add-keywords nil '(("\\[\\(.*\\)\\]"
                                 1 font-lock-warning-face prepend)))
  ;; some more init code
)
person Joao Tavora    schedule 13.09.2011

Итак, вот краткое изложение: чтобы добавить новые ключевые слова в режим

(font-lock-add-keywords 'emacs-lisp-mode
  '(("foo" . font-lock-keyword-face)))

Он может иметь регулярные выражения:

(font-lock-add-keywords 'emacs-lisp-mode '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))

(это делает шрифт всего в квадратных скобках заданного цвета)

Для текущего режима и текущего сеанса emacs вы можете просто оценить следующее:

(font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))

(примечание. Здесь вы не указываете режим)

Чтобы сделать его постоянным, вы можете добавить его как хук в режим:

(add-hook 'bk-grmx-mode-hook
          (lambda ()
            (font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
          )
)

Вы также можете добавить его в спецификацию режима:

(define-derived-mode bk-grmx-mode fundamental-mode
  (setq font-lock-defaults '(bk-grmx-keyWords))
  ;; the next line is added:
  (font-lock-add-keywords nil '(("\\[\\(.+?\\)\\]" . font-lock-keyword-face)))
  (setq mode-name "bk-grmx-mode")
person Adobe    schedule 14.09.2011

Вам нужно либо расширить режим, в котором вы находитесь, чтобы включить новое правило синтаксиса, либо вы можете просто использовать highlight-regexp для быстрой и грязной подсветки.

person Noufal Ibrahim    schedule 13.09.2011
comment
Продлить режим - вот что я хочу. Режим, который я собираюсь расширить, прост — он также написан мной (в нем есть автодополнение табуляции, подсветка синтаксиса и умные комментарии через dwim). hightlight-regexp обязательно сработает. Спасибо за Ваш ответ. - person Adobe; 13.09.2011
comment
Я расширил базовый режим уценки здесь. Вы можете посмотреть на это как. Он не выполняет подсветку синтаксиса, но вы, вероятно, можете получить это, добавив к переменной font-lock-defaults в вашем режиме. - person Noufal Ibrahim; 13.09.2011
comment
Кстати: как указать цвет? Это не указывает: (highlight-regexp "\\[\\(.+?\\)\\]" 'hi-red) - person Adobe; 13.09.2011
comment
Он будет использовать face, который вы должны customize. - person Noufal Ibrahim; 13.09.2011
comment
Ну да. Но как указать с помощью команды: (highlight-regexp REGEXP &optional FACE)? Потому что я пишу режим... - person Adobe; 13.09.2011
comment
Если вы пишете режим, не используйте highlight-regexp. Используйте правило блокировки шрифта. - person Noufal Ibrahim; 13.09.2011