我想用Qt和Common Lisp实现另一个Emacs
作为我的业余项目,以便更好地学习。但我不确定是否有“Emacs官方规范”,以便我可以遵循以确保与其他实现(如GNU Emacs)的最大兼容性。
我想用Qt和Common Lisp实现另一个Emacs
作为我的业余项目,以便更好地学习。但我不确定是否有“Emacs官方规范”,以便我可以遵循以确保与其他实现(如GNU Emacs)的最大兼容性。
一些软件是由标准定义的,有许多实现方式(例如Common Lisp,Scheme,C,C++等),而有些软件则是由其独特的实现方式定义的,文档对其次要(例如Emacs,Python,Ruby,Perl)。还有中间情况的Java,它是由不断发展的标准定义的,并且有一个参考实现,由少数其他人跟踪。
并没有“Emacs官方规范” - 它是由实现方式定义的(还有其他Emacsen,有些更兼容,有些不太兼容;有些更活跃,有些不那么活跃)。同时,Emacs编辑器和Emacs Lisp语言都有广泛的手册,您应该读两者(从C-h C-h开始)。但是,文档不是规范:如果有疑问,请参考源代码而不是文档。如果两者之间存在差异,则通常的解决办法是更改文档,而不是代码。
我建议您从CL-Emacs页面开始 - 您认为您是第一个考虑在CL中使用Emacs的人吗? - 已经有相当多类似的项目了。
无耻地自荐:15年前,我编写了elisp.lisp
,它允许您在Common Lisp中运行“任意”Emacs Lisp代码。当然,它不适用于依赖于Emacs编辑器功能(例如缓冲区)的代码,但您可以加载Emacs日历并将日期从公历转换为玛雅文。
如果您决定从头开始实现CL Emacs,我建议您选择一个大型的Emacs Lisp项目(例如Gnus、Calc、Org-mode等),并确保您的编辑器完美支持它。然后你知道你有对其他人有用的东西。
但是!我们忘记了:Emacs哲学的一个核心支柱是自我文档化
。Emacs通过其帮助系统(是的,帮助系统记录了自己)实际上记录了其行为的几乎每个方面。一些有用的命令:
describe-key
)会为您提供绑定到按键的函数的文档。因此,Control+h k,Control+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 作为字符串或向量传递。 <任务内容已删除>
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(一个符号)的完整文档。
describe-function
)给出了所有按键绑定及其对应命令的列表。在命令上键入Return会带您到该命令的描述(类似于describe-function
)。这只是冰山一角。键入Alt + x describe- Tab,享受Emacs文档系统的强大力量。
Emacs 是自己的规范,就像旧版 UNIX 存在并且规范是基于它们编写的,而不是反过来。希望这对您有所帮助。
祝您的项目好运。 :)