Emacs 学习Elisp-阅读源代码的最高质量库是什么?

Emacs 学习Elisp-阅读源代码的最高质量库是什么?,emacs,styles,elisp,idioms,Emacs,Styles,Elisp,Idioms,在学习一门新的编程语言时,“阅读源代码”是专家们普遍接受的建议。然而,对于许多人几十年来构建的像emacs这样的庞大系统,初学者很难确定哪些库是惯用的Elisp编程的最佳示例。因此,我想就以下标准提出一些建议: 惯用的elisp编程风格 遵守emacs编程指南 根据emacs指南巧妙使用cl包 EIO包的巧妙使用 单个.el文件库的示例组织 多文件/多包库的示例性组织 你认为重要的标准 对于Emacs lisp编程的初学者来说,给出推荐某些库进行自动教学研究的原因肯定会很有帮助 我推荐的源代

在学习一门新的编程语言时,“阅读源代码”是专家们普遍接受的建议。然而,对于许多人几十年来构建的像emacs这样的庞大系统,初学者很难确定哪些库是惯用的Elisp编程的最佳示例。因此,我想就以下标准提出一些建议:

  • 惯用的elisp编程风格

  • 遵守emacs编程指南

  • 根据emacs指南巧妙使用cl包

  • EIO包的巧妙使用

  • 单个.el文件库的示例组织

  • 多文件/多包库的示例性组织

  • 你认为重要的标准


对于Emacs lisp编程的初学者来说,给出推荐某些库进行自动教学研究的原因肯定会很有帮助

我推荐的源代码应该是Emacs本身的源代码。从简单的东西(双关语)开始,像往常一样查看其他文件

M-x find-library simple RET

我认为Emacs自己的lisp代码是Emacs lisp的一个很好的例子是不言自明的。

正如Trey所说,使用Emacs本身的elisp来学习。我通常做两件事中的一件:

1) 如果我想知道如何使用特定的函数,我会打开一个
dired
窗口并执行以下操作:

% g foobar
其中
foobar
是我感兴趣学习如何使用的函数的名称。这将标记所有使用
foobar
的文件,然后我去搜索它们,看看如何调用它,在什么上下文中调用它,等等

2) 如果我想弄清楚如何做一些事情,并且我知道一个模式做了类似的事情,我会去看看这个模式的源代码,看看它们是如何做的。如果您不知道从哪里开始,但知道如何执行您想要执行的操作,那么一个方便的方法就是通过键绑定来查找它。例如,在
dired
缓冲区中,执行以下操作:

C-h k % g
这将带来:

% g runs the command dired-mark-files-containing-regexp, which is an
% interactive compiled Lisp function in `dired.el'.

It is bound to % g, <menu-bar> <regexp> <mark-cont>.
(dired-mark-files-containing-regexp regexp &optional marker-char)

Mark all files with contents containing regexp for use in later
commands. A prefix argument means to unmark them instead.
`.' and `..' are never marked.
%g运行包含regexp的dired mark文件命令,这是一个
%“dired.el”中的交互式编译Lisp函数。
它已绑定到%g。
(包含regexp regexp和可选标记字符的dired标记文件)
标记所有包含regexp内容的文件,以供以后使用
命令。前缀参数意味着取消标记它们。
`“.”和“…”从未标记。
单击上面文本中的
dired.el
(在emacs缓冲区中)将打开源代码并直接进入该函数定义。这是一个很好的学习方法


别忘了使用elisp调试器,它可以在代码一步一步执行的过程中准确地查看正在发生的事情以及随后发生的事情。您可以使用
edebug defun
标记调试代码,然后像往常一样调用它,此时emacs将引导您完成代码。

有很多编写良好的emacs包,因此几乎不可能选择其中一个。我建议你首先决定你想写什么样的软件包,然后研究类似的软件包。例如,如果您计划编写一个次要模式,请研究其他次要模式是如何实现的。也许我应该重新表述一下这个问题:因为学习Elisp编程的最终目标可能是自己的主要和次要模式的贡献,最好能有一个或两个每种典型贡献模式作为角色模型,并保证代码质量。当然,Emacs有很多质量模式,选择一种并不意味着其他模式就不那么好。但是,由于初学者既不知道编程人员和他们的声誉,也不知道判断代码的标准,所以专家们的一些建议会有所帮助。我刚刚发现了Robert J.Chassell的“Emacs Lisp编程入门”(可作为信息节点获得)这采用了类似的方法,并从Emacs自己的lisp代码中遍历了一些“简单”的elisp函数,并进行了大量解释。@Thorsten,这当然是一个很好的介绍,但没有太多的源代码可供查看。对于那些寻找它的人来说,“Emacs Lisp编程入门”可以在这里找到:有没有什么函数可以作为特别好的例子?例如,在阅读了
descripe-function-1
(在
help fns.el
中)之后,我不能将其作为编程风格的一个模型。这是值得研究的,但我认为对于新代码,我们可以做得更好。我开始看到,对于Emacs用户来说,所有方便的东西是如何使它成为Elisp程序员的优秀IDE的。