Я пытаюсь сделать простой основной режим подсветки синтаксиса, используя define-generic-mode
. Я обнаружил, чтоemacs define-generic-mode Почему нельзя использовать regexp-opt?
(define-generic-mode 'mytest-mode
'("//") nil
'(
((regexp-opt '("int" "string" "bool")) . 'font-lock-type-face)
)
nil nil "mytest mode"
)
не работает. Но если я заменю regexp-opt
вызов с его вручную вычисленного результата, то все работает, как ожидалось:
(define-generic-mode 'mytest-mode
'("//") nil
'(
("\\(?:bool\\|int\\|string\\)" . 'font-lock-type-face)
)
nil nil "mytest mode"
)
Итак, почему я не могу просто поставить regexp-opt
вызов в определении режима?
EDIT
Подсказка о принудительной оценки элементов в котировальный список из ответа Lindidancer в:
(define-generic-mode 'mytest-mode
'("//") nil
'(
(,(regexp-opt '("int" "string" "bool")) 'font-lock-type-face)
)
nil nil "mytest mode"
)
не помогает: нет ошибок по активации режима, но без подсветки также
Второму намек об использовании list
функция для составления списков:
(define-generic-mode 'mytest-mode
'("//") nil
(list
((regexp-opt '("int" "string" "bool")) 'font-lock-type-face)
)
nil nil "mytest mode"
)
дает ошибку на активирующий режим: (invalid-function (regexp-opt (quote ("int" "string" "bool"))))
же ошибки при попытке оценить:
(list
((regexp-opt '("int" "string" "bool")) 'font-lock-type-face)
)
в царапанию буфере.
EDIT 1
(list (list (regexp-opt '("int" "string" "bool")) 'font-lock-type-face))
не помогает также - нет ошибок, нет подсветки.
EDIT 2
шаги, что я точно делать, являются:
- Выполнить
define-generic-mode
вызов в*Scratch*
буфере - Переключитесь в буфер с некоторых ключевых слов испытуемой
M-x mytest-mode
После года мучений вы открыли мне глаза, поэтому я принял ваш ответ, спасибо) – shibormot