emacs主要模式定义

时间:2016-03-02 18:42:44

标签: regex emacs elisp major-mode

我正在尝试编写一个非常基本的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)第二个问题肯定证明了我的无知......基本上,在下面结构的表达式中,我想用变量中的值替换“regexp”文字(有效)(这里:x,x由(正确)由regexp-opt计算)...但我不知道如何在这里插入x的: - (

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

感谢您的提示。

2 个答案:

答案 0 :(得分:3)

  

虽然语法突出显示有效,但我还是没有   不区分大小写。我尝试添加(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))

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

  

第二个问题肯定证明了我的无知......基本上,   在下面结构的表达式中,我想替换   "正则表达式"文字(由工作)通过变量中的值(这里:   x,x正确地由regexp-opt计算得出......但是我不知道   知道如何在这里插入x的值: - (

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

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

要评估反引号中的foo,我们会在其前面添加一个逗号,,foo

答案 1 :(得分:2)

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

  

...   默认值应为以下形式:

     

(关键字[仅限关键字[案例折叠[同义词]]]])   ...

这告诉您可以设置" case-fold"行为就在那里:

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

另外,请帮自己一个忙,并使用define-derived-mode(并更新您找到的指向defun+interactive+setqmode-name+...的文档,以便它也引用define-derived-mode