簡體   English   中英

emacs主模式定義

[英]emacs major mode definition

我正在嘗試編寫一個非常基本的emacs主模式來編輯匯編器源文件(用於特定的微控制器)。 我使用https://www.emacswiki.org/emacs-test/ModeTutorial作為起點。 它可行,但我想更改兩件事,但找不到解決方案。

是的,我渴望隨着時間的流逝對eLisp有了更透徹的了解,但是我也嘗試快速破解通往工作模式定義的方式,因為我現在需要它(沒有真正了解復雜性-我知道,RTFM ... )。

無論如何,我希望得到兩個問題的答案:

1)雖然語法高亮有效,但我不認為它不區分大小寫。 我嘗試將(setq font-lock-keywords-case-fold-search t)到下面的函數中,但是似乎沒有達到預期的效果。

(defun xasm-mode ()
   (interactive)
   (kill-all-local-variables)
   (use-local-map xasm-mode-map)         
   (set-syntax-table xasm-mode-syntax-table)
   ;; set up font-lock
   (set (make-local-variable 'font-lock-defaults) '(xasm-font-lock-keywords)) 
   (setq font-lock-keywords-case-fold-search t)
   (setq major-mode 'xasm-mode)
   (setq mode-name "XASM")       
   (run-hooks 'xasm-mode-hook))

2)肯定的第二個問題證明了我的無知...基本上,在具有以下結構的表達式中,我想用變量中的值(此處為x)代替“ regexp”文字(有效) ,其中x由regexp-opt(正確地)計算出)...但是我不知道如何在此處插入x的 :-(

(setq x 'xyz)
(defconst v2
  (list
     '( "regexp" . foo)
))

感謝您的提示。

雖然語法高亮有效,但我不認為它不區分大小寫。 我嘗試將(setq font-lock-keywords-case-fold-search t)添加到下面的函數中,但是似乎沒有達到預期的效果。

也許是因為您使用defun而不是使用更現代的define-derived-mode

(define-derived-mode xasm-mode prog-mode "XASM"
  ;; set up font-lock
  (set (make-local-variable 'font-lock-defaults) '(xasm-font-lock-keywords)) 
  (set (make-local-variable 'font-lock-keywords-case-fold-search) t))

如果這不起作用,我想您只需要手動使其變得不敏感, [az] -> [a-zA-Z]等。

肯定的第二個問題證明了我的無知...基本上,在具有以下結構的表達式中,我想用變量中的值(此處為x)替換“ regexp”文字(有效) x(正則表達式由regexp-opt計算)...但是我不知道如何在這里插入x的值:-(

Legocia指出的那樣使用逗號運算符。 在您的情況下,它將如下所示:

(defconst v2
  `(
    ( "regexp" . ,foo)
    ))

為了評估反引號內的foo ,我們在其前面加上一個逗號,foo

使用Ch v font-lock-defaults RET檢查文檔:

...默認值應采用以下形式:

(關鍵字[僅關鍵字[大寫字母[語法清單...]])] ...

它告訴您可以在此處設置“ case-fold”行為:

(set (make-local-variable 'font-lock-defaults)
     '(xasm-font-lock-keywords nil t))

另外,請幫自己一個忙,並使用“定義衍生模式”(並更新您發現的指向defun+interactive+setqmode-name+...任何文檔,以便它也引用“ define-derived-mode ”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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