我通过从 prog-mode 派生来定义 Emacs 主要模式。字体锁定工作除了一件事:
我想强调一种特殊的注释类型,它包含特殊的链接器指令,使用与常规注释不同的字体。常规注释以“;”开头 而链接器指令的格式为“;<...directive...>”。当然,字符串中的文本不应被误认为是注释。
到目前为止,我所拥有的是:
;; define syntax highlighting
(setq p18-font-lock-defaults
`(
;; strings
("\"\\.\\*\\?" . font-lock-string-face)
;; linker directives
("^ *;<.+>.*$" . font-lock-preprocessor-face)
;; mnemonics
( , p18-mnemonics-regexp . font-lock-keyword-face)
)
)
;; define derived mode
(define-derived-mode p18-mode prog-mode "P18"
"...mode description..."
;; define syntax highlighting
(set (make-local-variable 'font-lock-defaults)
'(p18-font-lock-defaults nil t))
;; comments
(setq comment-start ";")
(setq comment-end "")
;; === works when comments start with "; "
;; (modify-syntax-entry ?; ". 1" p18-mode-syntax-table)
;; (modify-syntax-entry 32 ". 2" p18-mode-syntax-table)
;; (modify-syntax-entry ?\n ">" p18-mode-syntax-table)
;; ugly incomplete hack works for comments with ASCII code of
;; second char ?\;
;; (modify-syntax-entry ?; ". 1" p18-mode-syntax-table)
;; (modify-syntax-entry '(?= . 127) ". 2" p18-mode-syntax-table)
;; (modify-syntax-entry ?\n ">" p18-mode-syntax-table)
)
问题在于,使用语法表条目,此机制将对所有以 ; 开头的内容进行分类。作为评论。因此,链接器指令正则表达式不再有效。
我怎样才能实现所需的行为?看来我需要一种允许检查后面的字符的模式。但是使用语法表进行评论检测看起来不错,因为它可以正确处理字符串。
更一般地说,我对解释 emacs/elisp 的“架构”的文档感兴趣(例如,模式和哪些操作序列适用于字体锁定。缓冲区交互也是如此)。我有很棒的 elisp 参考手册,但我错过了对这些主题的概念介绍。我已经阅读了 emacs elisp 介绍,但不喜欢它,因为我发现它太“教程式”,非常冗长和重复,并且缺少系统的覆盖。例如,没有关于反引号的句子。它似乎也适用于编程经验为零的人 - 但是会从 elisp 开始吗?