一个类C语言的Emacs模式

6

我正在尝试为一种新的类c语言编写一个新的emacs模式,这是我在某些学术研究中必须使用的。

我希望代码能像c-mode一样着色和缩进,但有以下例外:

  • '%'不作为运算符,而是作为一些特定关键字的第一个字符(例如:'%p','%action'等)
  • 代码行不以分号结尾。

是否可以创建一个派生模式(从c-mode派生),并将其设置为忽略'%'和';'的原始用途?是否可以使“按下RET后自动缩进”功能在没有';'的情况下工作?

是否有类似语言的相似模式(具有'{}'括号,但没有分号)可以尝试修补?

我应该尝试从头开始编写一个major mode吗?

我考虑过从http://ess.r-project.org/中修补R-mode,但此模式不支持形式为“/* comment */”的注释。

我正在寻找的最重要的功能是括号缩进,即在按下RET后缩进'{}'块内的代码(在不以';'结尾的行后没有额外缩进)。部分解决方案也将有所帮助。

3个回答

3
更一般地说,随着时间的推移,CC-mode已经被扩展和泛化以适应越来越多的语言,并且最新的CC-mode应该在将通用代码与特定于语言的代码隔离方面表现得相当不错。因此,请查看一些使用CC-mode的主要模式(例如awk-mode),并联系CC-mode的维护者,他将能够帮助您找出如何实现您想要的功能。

我尝试根据awk-mode补丁CC-mode(其中行不必以';'结尾),但这段代码太多了,很难理解和修复。 - Oren

2

2
如果您不介意使用非常简单的东西,可以看一下Gosu模式。Gosu是一种具有花括号和无分号的语言,因此您应该可以满足最低要求。它还使用与C相同的注释语法。
对于它的模式实现非常简单,基于通用模式,因此修改它以使其按您想要的方式工作应该很容易。它并不是基于C-mode。
这就是我用来为编译器课程中我正在开发的语言制作模式的。即使经验有限,也非常容易。另一方面,缩进相当简单--它适用于大多数代码,但不像C-mode那样完整。

我使用了Google Go模式并进行了修补,而不是使用Gosu模式。 - Oren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接