终于有点时间打算试试 pdump:因为感觉罗列使用的包再 require
十分不优雅、所以就匹配 use-package
然后再 require
它们。
;;; init.el -*- lexical-binding: t -*-
;; This file dumps the current installation.
;; Copyright (C) 2025 RadioNoiseE
(package-initialize)
(defconst dumped-load-path load-path)
(defconst dumped-load-mask '(gptel))
(dolist (site '("early-init.el" "init.el"))
(with-temp-buffer
(insert-file-contents (concat user-emacs-directory site))
(goto-char (point-min))
(condition-case error
(while-let ((form (read (current-buffer))))
(pcase form
(`(use-package ,package . ,rest)
(unless (memq package dumped-load-mask)
(message "(require %s%s)" "\N{APOSTROPHE}" package)
(require package nil t)))
(_ (eval form))))
(end-of-file nil))))
(defun dumped-init ()
(global-font-lock-mode t)
(transient-mark-mode t))
(add-hook 'emacs-startup-hook 'dumped-init)
(dump-emacs-portable "Emacs.pdmp")
不直接eval是因为不希望受 :defer
、:hook
等keyword的影响。而且某些 :init
和 :config
这些可能会出现奇怪的问题(overlay not supported
这些)。
应该只适用于使用没有嵌套的 use-package
管理配置的人。
我目前感觉到的 pdump 的优点:
- 启动快、现在
(emacs-init-time)
稳定 0.15s 以下 - 反应快、第一次进入某些 mode 不会卡那么微妙的一下
感觉 pdump 还是挺有应用潜力的(我同时使用 igc branch、但因为不想装 gcc 没试过 native-comp)。