簡體   English   中英

emacs派生模式中“特殊”注釋的不同字體鎖定方案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM