16.10 自动加载

与通过加载包含函数的文件或评估函数定义来安装函数不同,您可以使函数可用,但实际上只有在首次调用时才安装它。这称为自动加载

当执行一个自动加载的函数时,Emacs会自动评估包含定义的文件,然后调用该函数。

Emacs使用自动加载的函数启动更快,因为它们的库不会立即加载;但是当您首次使用这样的函数时,需要等待片刻,因为其包含文件正在评估中。

很少使用的函数经常被自动加载。loaddefs.el库包含数千个自动加载的函数,从5x5zone。当然,您可能会经常使用一个罕见的函数。当您这样做时,应该在.emacs文件中使用load表达式加载该函数的文件。

在我的.emacs文件中,我加载了14个包含函数的库,否则这些函数将被自动加载。(实际上,最好在我的dumped Emacs中包含这些文件,但我忘了。有关dumping的更多信息,请参阅See Building Emacs in The GNU Emacs Lisp Reference Manual, INSTALL文件。)

您可能还希望在.emacs文件中包含自动加载的表达式。autoload是一个内置函数,最多接受五个参数,最后三个是可选的。第一个参数是要自动加载的函数的名称;第二个是要加载的文件的名称。第三个参数是函数的文档,第四个告诉函数是否可以通过交互调用。第五个参数告诉对象的类型——autoload可以处理键位图或宏以及函数(默认是函数)。

这是一个典型的例子:

(autoload 'html-helper-mode
  "html-helper-mode" "Edit HTML documents" t)

html-helper-modehtml-mode的一个较旧的替代品,它是分发的标准部分。)

此表达式自动加载了html-helper-mode函数。它从html-helper-mode.el文件(或其字节编译版本html-helper-mode.elc,如果存在的话)中获取。该文件必须位于由load-path指定的目录中。文档说明这是一种帮助您编辑用HyperText Markup Language编写的文档的模式。您可以通过键入M-x html-helper-mode以交互方式调用此模式。(需要在自动加载表达式中重复函数的常规文档,因为常规函数尚未加载,所以其文档尚不可用。)

See Autoload in The GNU Emacs Lisp Reference Manual, 了解更多信息。