我正在爲支持兩種略有不同的編程語言的編程環境編寫emacs主模式。兩者都是lisps(一個是Scheme),所以都使用s表達式。這兩種語言是由它們的功能定義關鍵字分化:方案採用define
,而其他語言(稱爲xtlang)使用bind-func
基於頂級s表達式的字體鎖定關鍵字
因此,在相同的緩衝,我有
(define foo ; this is scheme
(lambda (a)
(+ scheme-fn a))
(bind-func bar ; this is xtlang
(lambda (b)
(* xtlang-fn b))
我已經得到的字體鎖定工作,使用像
(font-lock-add-keywords nil
'(("(\\(define\\)\\>"
(1 font-lock-keyword-face))
("(\\(bind-func\\)\\>"
(1 font-lock-keyword-face))
("\\<scheme-fn\\>"
(0 font-lock-function-name-face))
("\\<xtlang-fn\\>"
(0 font-lock-function-name-face))
))
東西,我想什麼,能夠做的是能夠以不同顏色基於語言(方案/ xtlang)的括號。
所以,所有顏色的形式紅色括號如果頂層defun定義是define
,藍色,如果它是一個bind-func
,同時仍強調所有關鍵字/表格內恢復正常功能。
這可能需要多行字體鎖定,因爲define
/bind-func
可能會位於要高亮顯示的關鍵字的上一行。 This thread暗示font-lock-multiline
與匹配錨定在font-lock-keywords
可能是答案,但接着暗示font-lock-multiline
應該只在多行方面是例外而不是規則的情況下使用。
我的其他選擇似乎是使用syntax-propertize
,但我有點困惑如何工作 - 文檔有點稀疏。