我正在嘗試使用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
呼叫模式定義是什麼?
編輯
提示有關從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))
不還幫助 - 沒有錯誤,沒有高亮。
EDIT 2
步驟,我究竟做的是:
- 執行
define-generic-mode
呼叫在*Scratch*
緩衝 - 開關測試下一些關鍵詞來緩衝
M-x mytest-mode
折磨一年後,你睜開了眼睛,所以我接受了你的回答,謝謝) – shibormot