[英]different font-lock scheme for “special” comments in emacs derived-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)
)
問題在於,通過語法表條目,該機制對以開頭的所有內容進行了分類; 作為評論。 因此,鏈接器指令regexp不再有效。
我怎樣才能達到預期的行為? 看來我需要一種允許檢查后面字符的模式。 但是隨后使用語法表進行注釋檢測似乎很好,因為它可以正確處理字符串。
更籠統地說,我對解釋emacs / elisp的“體系結構”的文檔感興趣(例如,模式和哪種操作序列可用於字體鎖定,對於緩沖區交互也是如此)。 我有很好的elisp參考手冊,但是我錯過了這些主題的概念介紹。 我已經閱讀了emacs elisp的介紹,但是不喜歡它,因為我發現它太“教程式”,非常冗長和重復,並且缺少系統性的介紹。 例如,沒有關於反引號的句子。 它似乎也可以解決零編程經驗的人,但是那會從elisp開始嗎?
您想使用font-lock-syntactic-face-function
來區分哪種注釋獲得哪種表情。 例如類似
(defun my-font-lock-syntactic-face-function (ppss)
(if (and (nth 8 ppss)
(save-excursion
(goto-char (nth 8 ppss))
(looking-at ";<.+>")))
'font-lock-preprocessor-face
(funcall (default-value 'font-lock-syntactic-face-function) ppss)))
...
(define-derived-mode ...
...
(set (make-local-variable 'font-lock-syntactic-face-function)
#'my-font-lock-syntactic-face-function)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.