Emacs 主要模式定义



我正在尝试编写一个非常基本的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,x 由正则表达式-opt(正确)计算)...但是我不知道如何在此处插入x的值:-(

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

感谢您的提示。

使用 C-h v font-lock-defaults RET 检查文档:

。 默认值应采用以下格式:

(关键字 [

仅关键字 [大小写折叠 [语法列表...]]]) ...

这告诉您可以在此处设置"大小写折叠"行为:

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

另外,帮自己一个忙并使用定义派生模式(并更新您找到的任何指向defun+interactive+setqmode-name+...的文档,以便它也引用define-derived-mode)。

虽然语法突出显示有效,但我不明白 不区分大小写。我尝试添加(设置) 字体-锁定-关键字-大小写-折叠-搜索 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))

如果这不起作用,我想你只需要用手让它不敏感,[a-z] -> [a-zA-Z] 等。

第二个问题肯定证明了我的无知......基本上 在具有以下结构的表达式中,我想替换 "正则表达式"文字(通过变量中的值起作用)(此处: x,x 由正则表达式选择(正确)计算)...但我没有 知道如何在此处插入 x 的值:-(

使用莱戈西亚指出的逗号运算符。在您的情况下,它将如下所示:

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

为了评估反引号内的foo,我们在它前面放了一个逗号,,foo

相关内容

  • 没有找到相关文章

最新更新