我们现在已经到达了这个介绍的结尾。您现在已经学到足够的关于在Emacs Lisp中编程的知识,足以设置值、为自己和朋友编写简单的.emacs文件,以及编写对Emacs进行简单定制和扩展的代码。
这是一个停下来的地方。或者,如果您愿意,现在可以继续前进,自己深入学习。
您已经学到了一些编程的基础知识。但仅仅是一些。有许多容易使用的括号和铰链,我们尚未涉及。
您现在可以追踪GNU Emacs的源代码以及 The GNU Emacs Lisp Reference Manual。
Emacs Lisp的源代码是一场冒险。当您阅读源代码并遇到一个陌生的函数或表达式时,您需要弄清楚或找出它的作用。
前往参考手册。它是对Emacs Lisp进行了详尽、完整且相当易读的描述。它不仅是为专家编写的,还为像您一样有一定基础的人编写的。(参考手册与标准GNU Emacs发行版一起提供。与本介绍一样,它作为一个Texinfo源文件,因此您可以在计算机上阅读它,并作为排版的印刷书籍阅读。)
查看GNU Emacs的其他内置帮助:所有函数和变量的内置文档,以及
xref-find-definitions
,该程序可以带您转到源代码。
这里是我探索源代码的一个示例。由于其名称,simple.el是我很久以前首先查看的文件。恰好simple.el中的一些函数很复杂,或者至少乍一看很复杂。例如,open-line
函数看起来很复杂。
您可能想像这个函数的作用,就像我们之前使用forward-sentence
函数一样慢慢地走一遍。(See The
forward-sentence
function.) 或者您可能想跳过该函数,查看另一个函数,比如split-line
。您不需要阅读所有函数。根据
count-words-in-defun
,split-line
函数包含102个单词和符号。
即使很短,split-line
包含我们尚未学习的表达式:skip-chars-forward
,indent-to
,current-column
和insert-and-inherit
。
考虑skip-chars-forward
函数。
在GNU Emacs中,您可以通过键入C-h f(describe-function
)和函数的名称来查找有关skip-chars-forward
的更多信息。这将显示函数文档。
您可能能够猜到一个命名得当的函数(例如indent-to
)的作用;或者您也可以查找它。顺便说一下,describe-function
函数本身位于help.el中;它是那些很长但可以解读的函数之一。您可以使用C-h f命令查找describe-function
!
在这种情况下,由于代码是Lisp,*Help*缓冲区包含包含函数源代码的库的名称。您可以将光标放在库的名称上,按下RET键,在这种情况下它绑定到help-follow
,直接转到源代码,方式类似于M-.(xref-find-definitions
)。
describe-function
的定义说明了如何定制interactive
表达式,而不使用标准字符代码;它还展示了如何创建临时缓冲区。
(indent-to
函数是用C而不是Emacs Lisp编写的;它是一个内置函数。help-follow
会将您带到它的源代码,就像xref-find-definitions
一样,当正确设置时。)
您可以使用xref-find-definitions
查看函数的源代码,它绑定到M-.。最后,您可以查看Reference Manual中关于该函数的内容,方法是在Info中访问手册,然后键入i(Info-index
)和函数的名称,或者在印刷副本的索引中查找该函数。
同样,您可以找出insert-and-inherit
的含义。
其他有趣的源文件包括paragraphs.el、loaddefs.el和loadup.el。paragraphs.el文件包含简短、易于理解的函数以及较长的函数。loaddefs.el文件包含许多标准的自动加载和许多按键映射。我从未完全查看过它;只是查看了部分。loadup.el是加载Emacs标准部分的文件;它告诉您关于Emacs构建方式的很多信息。(See Building Emacs in The GNU Emacs Lisp Reference Manual, 了解更多有关构建的信息。)
正如我所说,您已经学到了一些基础知识;但是,非常重要的是,我们几乎没有涉及编程的重要方面;我对如何排序信息一无所知,除了使用预定义的sort
函数之外;我对如何存储信息一无所知,除了使用变量和列表之外;我对如何编写编写程序的程序一无所知。这是另一种、不同类型的书籍、不同类型的学习的主题。
您所做的是学到了足够在GNU Emacs中进行实际工作的知识。您所做的是开始。这是一个开始的结束。