我正在尝试使用define-generic-mode
. 我找到
(define-generic-mode 'mytest-mode
'("//") nil
'(
((regexp-opt '("int" "string" "bool")) . 'font-lock-type-face)
)
nil nil "mytest mode"
)
不管用。但是,如果我将regexp-opt
call 替换为其手动计算的结果,那么一切都按预期工作:
(define-generic-mode 'mytest-mode
'("//") nil
'(
("\\(?:bool\\|int\\|string\\)" . 'font-lock-type-face)
)
nil nil "mytest mode"
)
那么,为什么我不能只regexp-opt
在模式定义中加入 call 呢?
编辑
从 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)
)
在暂存缓冲区中。
编辑 1
(list (list (regexp-opt '("int" "string" "bool")) 'font-lock-type-face))
也无济于事 - 没有错误,没有突出显示。
编辑 2
我所做的步骤是:
define-generic-mode
在*Scratch*
缓冲区中执行调用- 使用一些正在测试的关键字切换到缓冲区
M-x mytest-mode