diff --git a/bin/doom b/bin/doom index 416c861e7..f1c5eb740 100755 --- a/bin/doom +++ b/bin/doom @@ -82,7 +82,7 @@ ;; Bootstrap Doom (if (not noninteractive) - (progn + (let ((doom-interactive-mode t)) (load (expand-file-name "init.el" user-emacs-directory) nil 'nomessage) (doom-run-all-startup-hooks-h)) diff --git a/core/autoload/packages.el b/core/autoload/packages.el index b2ef5f1d1..66d16a6ac 100644 --- a/core/autoload/packages.el +++ b/core/autoload/packages.el @@ -165,7 +165,7 @@ This excludes core packages listed in `doom-core-packages'. If ALL-P, gather packages unconditionally across all modules, including disabled ones." - (let ((noninteractive t) + (let ((doom-interactive-mode t) (doom-modules (doom-modules)) doom-packages doom-disabled-packages) diff --git a/core/cli/byte-compile.el b/core/cli/byte-compile.el index 40fff8b81..abb1225df 100644 --- a/core/cli/byte-compile.el +++ b/core/cli/byte-compile.el @@ -92,7 +92,7 @@ If RECOMPILE-P is non-nil, only recompile out-of-date files." ;; But first we must be sure that Doom and your private config have been ;; fully loaded. Which usually aren't so in an noninteractive session. - (let (noninteractive) + (let ((doom-interactive-mode 'byte-compile)) (doom-initialize 'force) (doom-initialize-core) (doom-initialize-modules 'force)) diff --git a/core/core-editor.el b/core/core-editor.el index c131c0f7b..77cb1a9c4 100644 --- a/core/core-editor.el +++ b/core/core-editor.el @@ -168,7 +168,7 @@ successfully sets indent_style/indent_size.") "Add dired directory to recentf file list." (recentf-add-file default-directory))) - (unless noninteractive + (when doom-interactive-mode (add-hook 'kill-emacs-hook #'recentf-cleanup) (quiet! (recentf-mode +1)))) @@ -270,7 +270,7 @@ successfully sets indent_style/indent_size.") (use-package! dtrt-indent ;; Automatic detection of indent settings - :unless noninteractive + :when doom-interactive-mode :defer t :init (add-hook! '(change-major-mode-after-body-hook read-only-mode-hook) diff --git a/core/core-lib.el b/core/core-lib.el index ed2abf35b..348141fe1 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -401,7 +401,8 @@ reverse this and trigger `after!' blocks at a more reasonable time." This silences calls to `message', `load-file', `write-region' and anything that writes to `standard-output'." - `(cond (noninteractive + `(cond (doom-debug-mode ,@forms) + ((not doom-interactive-mode) (let ((old-fn (symbol-function 'write-region))) (cl-letf ((standard-output (lambda (&rest _))) ((symbol-function 'load-file) (lambda (file) (load file nil t))) @@ -411,8 +412,6 @@ writes to `standard-output'." (unless visit (setq visit 'no-message)) (funcall old-fn start end filename append visit lockname mustbenew)))) ,@forms))) - ((or doom-debug-mode debug-on-error debug-on-quit) - ,@forms) ((let ((inhibit-message t) (save-silently t)) (prog1 ,@forms (message "")))))) diff --git a/core/core-modules.el b/core/core-modules.el index 1ca47f678..45f41a467 100644 --- a/core/core-modules.el +++ b/core/core-modules.el @@ -48,7 +48,7 @@ syntax-checker modules obsolete. e.g. If :feature version-control is found in your `doom!' block, a warning is emitted before replacing it with :emacs vc and :ui vc-gutter.") -(defvar doom-inhibit-module-warnings (not noninteractive) +(defvar doom-inhibit-module-warnings doom-interactive-mode "If non-nil, don't emit deprecated or missing module warnings at startup.") ;;; Custom hooks @@ -84,7 +84,7 @@ non-nil." (load! "init" (plist-get plist :path) t))) doom-modules)) (run-hook-wrapped 'doom-before-init-modules-hook #'doom-try-run-hook) - (unless noninteractive + (when doom-interactive-mode (when doom-modules (maphash (lambda (key plist) (let ((doom--current-module key) @@ -224,7 +224,7 @@ those directories. The first returned path is always `doom-private-dir'." "Minimally initialize `doom-modules' (a hash table) and return it. This value is cached. If REFRESH-P, then don't use the cached value." (or (unless refresh-p doom-modules) - (let ((noninteractive t) + (let (doom-interactive-mode doom-modules doom-init-modules-p) (load! "init" doom-private-dir t) @@ -243,7 +243,7 @@ This value is cached. If REFRESH-P, then don't use the cached value." (setq use-package-compute-statistics doom-debug-mode use-package-verbose doom-debug-mode use-package-minimum-reported-time (if doom-debug-mode 0 0.1) - use-package-expand-minimally (not noninteractive))) + use-package-expand-minimally doom-interactive-mode)) ;; Adds four new keywords to `use-package' (and consequently, `use-package!') to ;; expand its lazy-loading capabilities. They are: @@ -410,7 +410,7 @@ to least)." (if-let (path (doom-module-locate-path category module)) (doom-module-set category module :flags flags :path path) (message "WARNING Couldn't find the %s %s module" category module))))))) - (when noninteractive + (unless doom-interactive-mode (setq doom-inhibit-module-warnings t)) `(setq doom-modules ',doom-modules))) diff --git a/core/core-packages.el b/core/core-packages.el index a8c1fd442..6a684ee43 100644 --- a/core/core-packages.el +++ b/core/core-packages.el @@ -149,8 +149,6 @@ necessary package metadata is initialized and available for them." :branch ,straight-repository-branch :no-byte-compile t)) (mapc #'straight-use-package doom-core-packages) - (when noninteractive - (add-hook 'kill-emacs-hook #'doom--finalize-straight))) (doom-log "Initializing doom-packages") (setq doom-disabled-packages nil doom-packages (doom-package-list)) @@ -165,7 +163,9 @@ necessary package metadata is initialized and available for them." (if-let (recipe (plist-get plist :recipe)) (let ((plist (straight-recipes-retrieve pkg))) `(,pkg ,@(doom-plist-merge recipe (cdr plist)))) - pkg))))) + pkg)))) + (unless doom-interactive-mode + (add-hook 'kill-emacs-hook #'doom--finalize-straight)))) (defun doom-ensure-straight () "Ensure `straight' is installed and was compiled with this version of Emacs." diff --git a/core/core-projects.el b/core/core-projects.el index c4bf12519..1687939f4 100644 --- a/core/core-projects.el +++ b/core/core-projects.el @@ -30,7 +30,7 @@ Emacs.") projectile-add-known-project) ; TODO PR autoload upstream :init (setq projectile-cache-file (concat doom-cache-dir "projectile.cache") - projectile-enable-caching (not noninteractive) + projectile-enable-caching doom-interactive-mode projectile-known-projects-file (concat doom-cache-dir "projectile.projects") projectile-require-project-root t projectile-globally-ignored-files '(".DS_Store" "Icon " "TAGS") @@ -67,7 +67,7 @@ b) represent blacklisted directories that are too big, change too often or are private. (see `doom-projectile-cache-blacklist'), c) are not valid projectile projects." (when (and (bound-and-true-p projectile-projects-cache) - (not noninteractive)) + doom-interactive-mode) (cl-loop with blacklist = (mapcar #'file-truename doom-projectile-cache-blacklist) for proot in (hash-table-keys projectile-projects-cache) if (or (not (stringp proot)) diff --git a/core/core.el b/core/core.el index 5f57fb1dd..b598d4512 100644 --- a/core/core.el +++ b/core/core.el @@ -12,6 +12,9 @@ Use `doom/toggle-debug-mode' to toggle it. The --debug-init flag and setting the DEBUG envvar will enable this at startup.") +(defvar doom-interactive-mode (not noninteractive) + "If non-nil, Emacs is in interactive mode.") + (defvar doom-gc-cons-threshold 16777216 ; 16mb "The default value to use for `gc-cons-threshold'. If you experience freezing, decrease this. If you experience stuttering, increase this.") @@ -410,7 +413,7 @@ in interactive sessions, nil otherwise (but logs a warning)." (let (command-switch-alist) (load (substring file 0 -3) 'noerror 'nomessage)) ((debug error) - (if noninteractive + (if doom-interactive-mode (message "Autoload file warning: %s -> %s" (car e) (error-message-string e)) (signal 'doom-autoload-error (list (file-name-nondirectory file) e)))))) @@ -495,7 +498,7 @@ to least)." ;; `Info-directory-list', and `doom-disabled-packages'. A big ;; reduction in startup time. (pkg-autoloads-p - (unless noninteractive + (when doom-interactive-mode (doom-load-autoloads-file doom-package-autoload-file)))) (if (and core-autoloads-p (not force-p)) @@ -528,7 +531,7 @@ to least)." (unless (or (and core-autoloads-p pkg-autoloads-p) force-p - noninteractive) + (not doom-interactive-mode)) (unless core-autoloads-p (message "Your Doom core autoloads file is missing")) (unless pkg-autoloads-p