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) 第二个问题肯定证明了我的无知......基本上,在具有以下结构的表达式中,我想用一个值替换 "regexp" 文字(有效)在变量中(此处:x,x 由 regexp-opt(正确)计算)...但我不知道如何在此处插入 x 的 value :-(
(setq x 'xyz)
(defconst v2
(list
'( "regexp" . foo)
))
感谢您的提示。
While syntax highlighting works, I don't get it to be
case-insensitive. I tried adding (setq
font-lock-keywords-case-fold-search t) to the function below, but it
does not seem to have the desired effect.
可能是因为您使用 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]
,等等
The second question for sure demonstrates my ignorance... Basically,
in an expression with the structure below, I'd like to substitute the
"regexp" literal (which works) by a value that is in a variable (here:
x, with x being (correctly) computed by regexp-opt)... But I don't
know how to insert the value of x here :-(
使用 legoscia 指出的逗号运算符。在您的情况下,它将如下所示:
(defconst v2
`(
( "regexp" . ,foo)
))
为了计算反引号内的 foo
,我们在它前面放了一个逗号,,foo
.
检查文档 C-h v font-lock-defaults RET
:
...
Defaults should be of the form:
(KEYWORDS [KEYWORDS-ONLY [CASE-FOLD [SYNTAX-ALIST ...]]])
...
这告诉您可以在此处设置 "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
)。
我正在尝试编写一个非常基本的 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 的 value :-(
(setq x 'xyz)
(defconst v2
(list
'( "regexp" . foo)
))
感谢您的提示。
While syntax highlighting works, I don't get it to be case-insensitive. I tried adding (setq font-lock-keywords-case-fold-search t) to the function below, but it does not seem to have the desired effect.
可能是因为您使用 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]
,等等
The second question for sure demonstrates my ignorance... Basically, in an expression with the structure below, I'd like to substitute the "regexp" literal (which works) by a value that is in a variable (here: x, with x being (correctly) computed by regexp-opt)... But I don't know how to insert the value of x here :-(
使用 legoscia 指出的逗号运算符。在您的情况下,它将如下所示:
(defconst v2
`(
( "regexp" . ,foo)
))
为了计算反引号内的 foo
,我们在它前面放了一个逗号,,foo
.
检查文档 C-h v font-lock-defaults RET
:
... Defaults should be of the form:
(KEYWORDS [KEYWORDS-ONLY [CASE-FOLD [SYNTAX-ALIST ...]]]) ...
这告诉您可以在此处设置 "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
)。