转到广点通后,开始使用陈老师(@RoachCock)开发的blade工具来统一构建程序代码,可惜在Emacs里暂时还没有相关的mode可以使用,所以就临时开发了一个。这里刚好也对如何去开发一个语言的语法高亮插件做个小结。
关键词语法高亮
关键词语法高亮使用 font-lock-defaults
定义,例如:
(set (make-local-variable 'font-lock-defaults) '(...))
设置语法描述表
这是关键步骤,告知emacs如何理解一些语法词汇,比如
(defvar blade-mode-syntax-table
(let ((st (make-syntax-table)))
(modify-syntax-entry ?_ "w " st) ;; 把下划线当作变量名的一部分
(modify-syntax-entry ?\' "\" " st) ;; 用单引号表示字符串
;; bash style comment
(modify-syntax-entry ?# "< " st) ;; 使用井号表示注释开始
(modify-syntax-entry ?\n "> " st) ;; 注释到行末
st)
"Syntax table for blade-mode")
可以使用 C-h s 来查看当前mode的syntax table,只有正确的表达了 string
, comment
, endcomment
这几个语法描述,才能正确的语法高亮font-lock-string-face
和font-lock-comment-face
。
具体的语法描述定义,可以查看 Syntax Descriptors
设置注释格式
例如 sh-scripts.el 里定义的bash注释格式:
(set (make-local-variable 'comment-start) "# ")
(set (make-local-variable 'comment-end) "")
(set (make-local-variable 'comment-start-skip) "#+[ \t]*")
定义缩进函数
所有的缩进细节都需要自己用一个函数来实现。这里应该是最复杂的一步,需要你去观察语言的语法结构,逐行缩进。
最后,给blade BUILD实现的blade-mode.el