emerald 的 Emacs 主要模式。正确突出显示
Emacs major mode for emerald. Correct highlighting
长话短说:
我是一名学生,在我的一门课程中,我们必须 use/learn emerald programming language. After a quick google search I found that somebody already wrote a major-mode for it. Link to the script
问题:在第一个注释行“%...”之后,语法高亮停止。因此所有后续行都没有任何语法突出显示。这是非常烦人的。
Emerald 没有多行注释。只有一行注释是语言语法的一部分。一行注释以“%”开始,以行尾结束。
我是整个主要模式的新手,正在为 emacs 编写 lisp 脚本...等等
问题:谁能帮我弄清楚语法高亮到底出了什么问题?为什么它在第一行评论后停止?以及如何修复它?
其他快速问题:
如何使 emacs 突出显示其他语言关键字?例如对象、导出、操作、函数...等等?
提前致谢:)
编辑:这是一个简单的 hello world 测试程序,用于演示语法高亮显示:
%this object pronts a hello message on screen
const hello <- object hello
var n : integer <- 0
operation gs[] -> [ret: integer]
n <- n + 1
ret <- n
return
end gs
% a comment
% second comment
% third comment
initially
stdout.putstring["Hello World!\n"]
end initially
end hello
第一个问题:可以使用https://github.com/Lindydancer/font-lock-studio包单步执行font-lock关键字。问题可能出在 font-lock 关键字之一,或者出在语法 table(用于突出显示注释和字符串)中。如果在您开始 font-lock-studio
之后(即在应用任何字体锁定关键字之前),突出显示不正确,那么问题出在语法 table.
第二个问题:您可以在主模式挂钩中调用font-lock-add-keywords
来添加新的font-lock关键字。有关格式的说明,请参阅变量 font-lock-keywords
。但是,描述有点隐晦,所以我也建议您在网上搜索一些好的例子。
更新: 安装后 emerald-mode
我可以重现您看到的问题。根本原因是该模式以不兼容的方式实现了核心 Emacs 功能(Emacs 提供的最多三个参数)。如果删除以下函数并重新启动 Emacs,字体锁定似乎会起作用。
(defun looking-back (regexp)
"Simulates a looking-at, but works backwards"
(and (save-excursion
(re-search-backward regexp (min (point-min) (- (point) 100)) t))
(= (point) (match-end 0))))
请注意,如果没有 font-lock-studio
,我无法找到它,因为正常的字体锁定会默默地忽略错误,而 font-lock-studio
会进入 lisp 调试器(如果 debug-on-error
为非零) .
更新 2:似乎 emerald-mode
定义了一组字体锁定关键字,但从未添加它们。如果您将以下行添加到您的初始化文件中,它似乎可以工作:
(defun my-emeral-mode-hook ()
(setq font-lock-defaults '(emerald-font-lock-keywords nil t))
(font-lock-mode 1))
(add-hook 'emerald-mode-hook 'my-emeral-mode-hook)
我注意到 emerald-mode
急需删除。例如,主模式不调用kill-all-local-variables
,这意味着它保留了之前主模式的所有局部变量。 (更好的解决方案是使用 define-derived-mode
而不是使用普通的 defun
来定义模式。)它将 font-lock-keywords-case-fold-search
设置为全局变量而不是通过 font-lock-defaults
等。
长话短说:
我是一名学生,在我的一门课程中,我们必须 use/learn emerald programming language. After a quick google search I found that somebody already wrote a major-mode for it. Link to the script
问题:在第一个注释行“%...”之后,语法高亮停止。因此所有后续行都没有任何语法突出显示。这是非常烦人的。
Emerald 没有多行注释。只有一行注释是语言语法的一部分。一行注释以“%”开始,以行尾结束。
我是整个主要模式的新手,正在为 emacs 编写 lisp 脚本...等等
问题:谁能帮我弄清楚语法高亮到底出了什么问题?为什么它在第一行评论后停止?以及如何修复它?
其他快速问题: 如何使 emacs 突出显示其他语言关键字?例如对象、导出、操作、函数...等等?
提前致谢:)
编辑:这是一个简单的 hello world 测试程序,用于演示语法高亮显示:
%this object pronts a hello message on screen
const hello <- object hello
var n : integer <- 0
operation gs[] -> [ret: integer]
n <- n + 1
ret <- n
return
end gs
% a comment
% second comment
% third comment
initially
stdout.putstring["Hello World!\n"]
end initially
end hello
第一个问题:可以使用https://github.com/Lindydancer/font-lock-studio包单步执行font-lock关键字。问题可能出在 font-lock 关键字之一,或者出在语法 table(用于突出显示注释和字符串)中。如果在您开始 font-lock-studio
之后(即在应用任何字体锁定关键字之前),突出显示不正确,那么问题出在语法 table.
第二个问题:您可以在主模式挂钩中调用font-lock-add-keywords
来添加新的font-lock关键字。有关格式的说明,请参阅变量 font-lock-keywords
。但是,描述有点隐晦,所以我也建议您在网上搜索一些好的例子。
更新: 安装后 emerald-mode
我可以重现您看到的问题。根本原因是该模式以不兼容的方式实现了核心 Emacs 功能(Emacs 提供的最多三个参数)。如果删除以下函数并重新启动 Emacs,字体锁定似乎会起作用。
(defun looking-back (regexp)
"Simulates a looking-at, but works backwards"
(and (save-excursion
(re-search-backward regexp (min (point-min) (- (point) 100)) t))
(= (point) (match-end 0))))
请注意,如果没有 font-lock-studio
,我无法找到它,因为正常的字体锁定会默默地忽略错误,而 font-lock-studio
会进入 lisp 调试器(如果 debug-on-error
为非零) .
更新 2:似乎 emerald-mode
定义了一组字体锁定关键字,但从未添加它们。如果您将以下行添加到您的初始化文件中,它似乎可以工作:
(defun my-emeral-mode-hook ()
(setq font-lock-defaults '(emerald-font-lock-keywords nil t))
(font-lock-mode 1))
(add-hook 'emerald-mode-hook 'my-emeral-mode-hook)
我注意到 emerald-mode
急需删除。例如,主模式不调用kill-all-local-variables
,这意味着它保留了之前主模式的所有局部变量。 (更好的解决方案是使用 define-derived-mode
而不是使用普通的 defun
来定义模式。)它将 font-lock-keywords-case-fold-search
设置为全局变量而不是通过 font-lock-defaults
等。