https://cgit.git.savannah.gnu.org/cgit/emacs.git/commit/?id=1b931fbe42bdad1507768872dfe034caa236adab
人肉chatgpt proxy来了
概览
- Emacs 新增了一个 “用户 Lisp 目录(User Lisp Directory)” 机制,在启动时自动处理某个目录里的 Lisp 文件。
- 新增了若干用户选项和一个命令,用来控制这个目录如何被扫描、编译以及加入
load-path。
用户 Lisp 目录
-
默认路径:
~/.config/emacs/user-lisp/或~/.emacs.d/user-lisp/
-
启动时的行为(如果该目录存在):
- 扫描文件中的 autoload 标记(cookies),让这些文件里的命令等可以在不手动
load的情况下使用。 - 对所有 Lisp 文件进行 字节编译,如果系统支持,还会进行 原生编译。
- 调整
load-path,使这些文件可以被正常load或 autoload。
- 扫描文件中的 autoload 标记(cookies),让这些文件里的命令等可以在不手动
-
该目录在 加载普通 init 文件之前 就会被处理,因此相关设置需要在
early-init.el中完成。
新增用户选项
-
user-lisp-directory-
指定一个目录,其中的 Lisp 文件会:
- 被字节编译;
- 被扫描 autoload;
- 被加入
load-path。
-
编译和 autoload 扫描是懒执行的,只在文件时间戳发生变化时才重新进行。
-
必须在 early-init 中设置;如果通过 Customize 设置,需要把该设置保存到
early-init-file。
-
-
user-lisp-auto-scrape(默认:t)- 为
t时:启动时自动处理user-lisp-directory。 - 为
nil时:启动不做自动处理,需要你手动调用prepare-user-lisp。 - 同样必须在 early-init 中设置。
- 为
-
user-lisp-ignored-directories- 一个目录名列表(如
.git、CVS等),prepare-user-lisp在递归时不会进入这些目录。 - 用来排除不含 Lisp 文件的管理目录或无关目录。
- 一个目录名列表(如
新命令:prepare-user-lisp
-
用途:准备
user-lisp-directory中的文件:- 字节编译;
- 扫描 autoload;
- 让这些 Lisp 文件在当前会话中可用。
-
参数(核心行为):
-
JUST-ACTIVATE(可选):- 非 nil 时,跳过字节编译和 autoload 扫描,仅激活已有的 autoload 信息。
-
AUTOLOAD-FILE(可选):- 指定写入 autoload 数据的文件;如果为 nil,则写在该目录旁边的一个文件中。
-
FORCE(可选 / 前缀参数):- 非 nil 或交互式调用时使用前缀参数,则无条件重建 autoload 文件并重新编译所有文件。
-
-
启动时,
command-line会在以下条件满足时自动调用:user-lisp-directory存在,且user-lisp-auto-scrape没有被关闭。
与包系统的关系
-
用户 Lisp 目录比包管理系统更 简单:
- 没有自动依赖解析;
- 没有自动升级;
- 没有自动生成和注册文档的功能。
-
更适用于:
- 只给自己用的个人代码。
-
也可以用于:
- 第三方包或你自己维护的包,只是不会享受包管理器的那些高级功能。
NEWS 中的要点
-
从 Emacs 31 开始,如果你的配置目录里有
user-lisp目录:- 其中所有子目录里的 Lisp 文件会被递归地字节编译、扫描 autoload,并加入
load-path。
- 其中所有子目录里的 Lisp 文件会被递归地字节编译、扫描 autoload,并加入
-
你可以:
- 用
user-lisp-auto-scrape关闭自动处理; - 用
user-lisp-directory指向系统中任意其他目录; - 在任何时候手动运行
prepare-user-lisp(推荐在升级 Emacs 后带前缀参数运行,以强制重建所有生成文件)。
- 用
感觉是把 borg 的一小部分代码抽取出来做的功能 lol。
ps2: 每次启动时都递归判断文件是否要重新扫描 autoload 和重新 byte-compile,感觉还挺影响启动速度的。至少 straight 是用时间戳来判断要不要重新编译的,我安装了大约 80 个包,启动速度的影响有 0.6s 左右。我是因此把 straight-check-for-modifications 给关掉了。如果感觉对启动速度的影响明显,可以考虑关掉 user-lisp-auto-scrape。
这个是作者的一些缘由
user-lisp-directory刚出的还有一些小bug,好像最近两天才修好,这个东西作为site-lisp平替挺合适的