16.2 加载后缀

本节说明 load 函数尝试的具体后缀相关技术细节。

Variable: load-suffixes

该变量是一个后缀列表,用于标识 Emacs Lisp 文件(编译版或源码版)。 列表中不应包含空字符串。当 load 为指定文件名附加 Lisp 后缀时, 会按顺序使用这些后缀。其标准值为 (".elc" ".el"), 对应上一节所述的行为逻辑。

Variable: load-file-rep-suffixes

该变量是一个后缀列表,用于标识同一文件的不同存储形式。 此列表通常应以空字符串开头。当 load 搜索文件时, 会先按顺序将该列表中的后缀附加到文件名后进行查找, 再尝试其他文件名。

启用自动压缩模式时,会将 jka-compr-load-suffixes 中的后缀添加到该列表; 禁用自动压缩模式时,则会移除这些后缀。 若禁用自动压缩模式,load-file-rep-suffixes 的标准值为 (""); 鉴于 jka-compr-load-suffixes 的标准值是 (".gz"), 启用自动压缩模式时,load-file-rep-suffixes 的标准值为 ("" ".gz")

Function: get-load-suffixes

load 函数的 must-suffix 参数非 nil 时, 该函数返回 load 应按顺序尝试的所有后缀列表。 此函数会同时考虑 load-suffixesload-file-rep-suffixes 的值。 若 load-suffixesjka-compr-load-suffixesload-file-rep-suffixes 均为标准值:启用自动压缩模式时,返回 (".elc" ".elc.gz" ".el" ".el.gz"); 禁用自动压缩模式时,返回 (".elc" ".el")

综上,load 通常先尝试 (get-load-suffixes) 返回值中的后缀, 再尝试 load-file-rep-suffixes 中的后缀。 若 nosuffixnil,则跳过前一组后缀; 若 must-suffixnil,则跳过后一组后缀。

User Option: load-prefer-newer

若该选项非 nilload 不会在找到第一个存在的后缀时停止, 而是测试所有后缀,并使用修改时间最新的文件。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike