Emacs有规范吗?

4

我想用QtCommon Lisp实现另一个Emacs作为我的业余项目,以便更好地学习。但我不确定是否有“Emacs官方规范”,以便我可以遵循以确保与其他实现(如GNU Emacs)的最大兼容性。


有趣的是,也值得看看Climacs - Daniel Lyons
2个回答

6

软件及规格

一些软件是由标准定义的,有许多实现方式(例如Common Lisp,Scheme,C,C++等),而有些软件则是由其独特的实现方式定义的,文档对其次要(例如Emacs,Python,Ruby,Perl)。还有中间情况的Java,它是由不断发展的标准定义的,并且有一个参考实现,由少数其他人跟踪。

Emacs

并没有“Emacs官方规范” - 它是由实现方式定义的(还有其他Emacsen,有些更兼容,有些不太兼容;有些更活跃,有些不那么活跃)。同时,Emacs编辑器和Emacs Lisp语言都有广泛的手册,您应该读两者(从C-h C-h开始)。但是,文档不是规范:如果有疑问,请参考源代码而不是文档。如果两者之间存在差异,则通常的解决办法是更改文档,而不是代码。

CL & Emacs

我建议您从CL-Emacs页面开始 - 您认为您是第一个考虑在CL中使用Emacs的人吗? - 已经有相当多类似的项目了。

无耻地自荐:15年前,我编写了elisp.lisp,它允许您在Common Lisp中运行“任意”Emacs Lisp代码。当然,它不适用于依赖于Emacs编辑器功能(例如缓冲区)的代码,但您可以加载Emacs日历并将日期从公历转换为玛雅文。

计划

如果您决定从头开始实现CL Emacs,我建议您选择一个大型的Emacs Lisp项目(例如Gnus、Calc、Org-mode等),并确保您的编辑器完美支持它。然后你知道你有对其他人有用的东西。


真的,恐怕这并不是很有帮助。 - PythonNut
@PythonNut:什么不是有帮助的? - sds
@PythonNut:不同意:权威地回答没有emacs的官方规范对于正在寻找规范的人非常有帮助,指出其他CL等实现方案的存在也是如此。+1 - kjhughes
@kjhughes 嗯,第一个版本说“你没想到你是第一个想到在CL中使用Emacs的人?”还有一些关于它的实现定义的内容。这个版本好多了。 - PythonNut
我没有从第一版中删除任何一个单词。 - sds
True...记住OP只是为了学习而这样做。我认为重新在CL中实现Emacs并没有错。我的另一个观点仍然成立,这个版本更好。 - PythonNut

3
据我所知(尽管相当有限),没有这样的规范存在。请记住,Emacs 主要只是一个相当古怪的 Lisp VM,碰巧用于编辑文本。任何不立即绑定一堆键、自定义功能并且通常“搞砸”任何已经存在的规范的 Emacs 用户,可能都不是因为喜欢它才使用 Emacs。Emacs 总是被认为是一个中间状态,跳板到您想要的任何东西。
话虽如此,也不是毫无办法。首先,有 官方 GNU emacs 手册,它既相当详尽,又易于解析(总体上)。不幸的是,手册的大部分内容涉及 Emacs Lisp,虽然对 Emacs 很重要,但对您的项目来说并不重要。

但是!我们忘记了:Emacs哲学的一个核心支柱是自我文档化。Emacs通过其帮助系统(是的,帮助系统记录了自己)实际上记录了其行为的几乎每个方面。一些有用的命令:

  • Control+h k <keybinding>(也称为describe-key)会为您提供绑定到按键的函数的文档。因此,Control+h kControl+h k会给你:

C-h k 运行 describe-key 命令,它是 `help.el' 中一个交互式的编译过的 Lisp 函数。

它绑定了 C-h k、<f1> k、<help> k、<menu-bar> <help-menu>、<describe> <describe-key-1>。

(describe-key &optional KEY UNTRANSLATED UP-EVENT)

显示与 KEY 绑定的函数的文档。 KEY 可以是任何类型的键序列;它可以包括键盘事件、鼠标事件和/或菜单事件。当从程序中调用时, 将 KEY 作为字符串或向量传递。 <任务内容已删除>

  • Control+h f <function name>(也称为 describe-function)可为 Emacs 中的任何函数提供文档。因此,Control+h f describe-function 显示:

describe-function 是一个交互式的autoloaded编译的Lisp函数,在`help-fns.el'中。

它绑定到C-h f、<f1> f、<help> f、<menu-bar> <help-menu> <describe> <describe-function>。

(describe-function FUNCTION)

显示FUNCTION(一个符号)的完整文档。

  • Control+h b(又名describe-function)给出了所有按键绑定及其对应命令的列表。在命令上键入Return会带您到该命令的描述(类似于describe-function)。

这只是冰山一角。键入Alt + x describe- Tab,享受Emacs文档系统的强大力量。


Emacs 是自己的规范,就像旧版 UNIX 存在并且规范是基于它们编写的,而不是反过来。希望这对您有所帮助。

祝您的项目好运。 :)


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