refactor: move file-name-handler-alist hack to early-init

In the future, early-init.el (among other parts of Doom) will be
byte-compiled, plus I'd rather keep these optimizations in one place.

Ref: 1d8c61698b
This commit is contained in:
Henrik Lissner 2022-09-06 19:18:52 +02:00
parent 71469d8056
commit 1dac4ac37b
No known key found for this signature in database
GPG key ID: B60957CA074D39A3
2 changed files with 16 additions and 18 deletions

View file

@ -30,13 +30,23 @@
(unless (or (daemonp)
init-file-debug)
;; PERF: `file-name-handler-alist' is consulted on each `require', `load' and
;; various path/io functions (like `expand-file-name'). You get a minor, but
;; noteable, boost by unsetting this.
(let ((old-file-name-handler-alist file-name-handler-alist))
;; `file-name-handler-alist' is consulted on each `require', `load' and
;; various path/io functions. You get a minor speed up by unsetting this.
;; Some warning, however: this could cause problems on builds of Emacs where
;; its site lisp files aren't byte-compiled and we're forced to load the
;; *.el.gz files (e.g. on Alpine).
(setq-default file-name-handler-alist nil)
(setq file-name-handler-alist
;; HACK: If the bundled elisp for this Emacs install isn't
;; byte-compiled (but is compressed), then leave the gzip file
;; handler there so Emacs won't forget how to read read them.
;;
;; calc-loaddefs.el is our heuristic for this because it is built-in
;; in all supported versions of Emacs, and calc.el explicitly load
;; it uncompiled. This ensure the only other, psosible fallback
;; would be calc-loaddefs.el.gz.
(if (eval-when-compile
(locate-file-internal "calc-loaddefs.el" load-path nil))
nil
(list (rassq 'jka-compr-handler file-name-handler-alist))))
;; ...but restore `file-name-handler-alist' later, because it is needed for
;; handling encrypted or compressed files, among other things.
(defun doom-reset-file-handler-alist-h ()

View file

@ -44,18 +44,6 @@ hoist buggy forms into autoloads.")
(signal 'doom-error
(list "The installed version of Doom has changed since last 'doom sync' ran"
"Run 'doom sync' to bring Doom up to speed"))))
;; HACK If the bundled elisp for this Emacs install isn't
;; byte-compiled, disengage the `file-name-handler-alist'
;; optimization early to prevent encoding errors when Emacs tries to
;; read gzipped elisp.
;;
;; calc-loaddefs.el is a good heuristic for this because calc.el
;; explicitly tries to load the un-compiled calc-loaddefs.el. If it
;; doesn't exist, it'll go for calc-loaddefs.el.gz instead.
(unless (locate-file "calc-loaddefs.el" (get 'load-path 'initial-value) nil)
`((when (fboundp 'doom-reset-file-handler-alist-h)
(doom-reset-file-handler-alist-h)
(remove-hook 'emacs-startup-hook #'doom-reset-file-handler-alist-h))))
(cl-loop for var in doom-autoloads-cached-vars
when (boundp var)
collect `(set ',var ',(symbol-value var)))