for the processes to exit. Additionally, you can now wait for external
processes by passing their PIDs.
+---
+*** New hook 'eshell-after-initialize-hook'.
+This hook runs after an Eshell session has been fully initialized,
+immediately before running 'eshell-post-command-hook' for the first
+time.
+
** SHR
+++
'eshell/source)
eshell-interpreter-alist))
(setq-local eshell-complex-commands
- (append '("source" ".") eshell-complex-commands))
- ;; these two variables are changed through usage, but we don't want
- ;; to ruin it for other modules
- (let (eshell-inside-quote-regexp
- eshell-outside-quote-regexp)
- (and (not (bound-and-true-p eshell-non-interactive-p))
- eshell-login-script
- (file-readable-p eshell-login-script)
- (eshell-do-eval
- `(eshell-commands ,(eshell--source-file eshell-login-script))
- t))
- (and eshell-rc-script
- (file-readable-p eshell-rc-script)
- (eshell-do-eval
- `(eshell-commands ,(eshell--source-file eshell-rc-script))
- t))))
+ (append '("source" ".") eshell-complex-commands))
+ ;; Run our startup scripts once this Eshell session has finished
+ ;; initialization.
+ (add-hook 'eshell-after-initialize-hook #'eshell-run-startup-scripts 90 t))
+
+(defun eshell-run-startup-scripts ()
+ "Run any necessary startup scripts for the current Eshell session."
+ (when (and (not (bound-and-true-p eshell-non-interactive-p))
+ eshell-login-script
+ (file-readable-p eshell-login-script))
+ (eshell-do-eval
+ `(eshell-commands ,(eshell--source-file eshell-login-script))
+ t))
+ (when (and eshell-rc-script
+ (file-readable-p eshell-rc-script))
+ (eshell-do-eval
+ `(eshell-commands ,(eshell--source-file eshell-rc-script))
+ t)))
(defun eshell--source-file (file &optional args subcommand-p)
"Return a Lisp form for executing the Eshell commands in FILE, passing ARGS.
That is to say, the first time during an Emacs session."
:type 'hook)
+(defcustom eshell-after-initialize-hook nil
+ "A hook that gets run after an Eshell session has been fully initialized."
+ :type 'hook)
+
(defcustom eshell-exit-hook nil
"A hook that is run whenever `eshell' is exited.
This hook is only run if exiting actually kills the buffer."
(when eshell-first-time-p
(setq eshell-first-time-p nil)
(run-hooks 'eshell-first-time-mode-hook))
-
+ (run-hooks 'eshell-after-initialize-hook)
(run-hooks 'eshell-post-command-hook))
(put 'eshell-mode 'mode-class 'special)