From f748a5d15d099af3af7de46475e7ec16ac6227f5 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sat, 17 Sep 2022 15:24:20 +0200 Subject: [PATCH] fix(cli): inability to find user-emacs-directory (part 2) I misunderstood the issue in 1081588. `user-emacs-directory` is never nil, even in batch sessions. Instead, it is simply set to the wrong path in cases where Doom is deployed to a non-standard location. It's needed to change it there, but never in interactive sessions. Fix: #6777 Amend: 108158876c99 --- early-init.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/early-init.el b/early-init.el index bbb2c0865..dc39a2e9b 100644 --- a/early-init.el +++ b/early-init.el @@ -45,21 +45,21 @@ ;; notable saving in startup time. This let-binding is just a stopgap though, ;; a more complete version of this optimization can be found in lisp/doom.el. (let (file-name-handler-alist) - ;; FIX: If this file was loaded via -batch or bin/doom, then - ;; `user-emacs-directory' won't be set. As a starting point, let's assume - ;; it's the directory this early-init.el file lives in. - (unless user-emacs-directory - (setq user-emacs-directory (file-name-directory (file-truename load-file-name)))) - ;; FEAT: First, we process --init-directory and --profile to detect what ;; `user-emacs-directory' to load from. I avoid using ;; `command-switch-alist' to process --profile and --init-directory because ;; it is processed too late to change `user-emacs-directory' in time. - ;; REVIEW: Backported from Emacs 29. Remove when 28 support is dropped. (let ((initdir (or (cadr (member "--init-directory" command-line-args)) (getenv-internal "EMACSDIR")))) - (when initdir + (if (null initdir) + ;; FIX: If we've been loaded directly (via 'emacs -batch -l + ;; early-init.el') or by a doomscript (like bin/doom), and Doom is + ;; in a non-standard location (and/or Chemacs is used), then + ;; `user-emacs-directory' will be wrong. + (when noninteractive + (setq user-emacs-directory + (file-name-directory (file-truename load-file-name)))) ;; FIX: Discard the switch to prevent "invalid option" errors later. (push (cons "--init-directory" (lambda (_) (pop argv))) command-switch-alist) (setq user-emacs-directory (expand-file-name initdir))))