summaryrefslogtreecommitdiff
path: root/lisp/eshell
diff options
context:
space:
mode:
authorJim Porter <jporterbugs@gmail.com>2022-02-23 20:43:38 -0800
committerLars Ingebrigtsen <larsi@gnus.org>2022-02-24 10:35:54 +0100
commitbe496f942cb1a6b9a4b31ae6098cb09166793fec (patch)
treea55b583e356c2e1a90c49c094893f07da515a99b /lisp/eshell
parentaedb74b2940cffa56c26c142c4bb8c2a7a21839f (diff)
downloademacs-be496f942cb1a6b9a4b31ae6098cb09166793fec.tar.gz
emacs-be496f942cb1a6b9a4b31ae6098cb09166793fec.tar.bz2
emacs-be496f942cb1a6b9a4b31ae6098cb09166793fec.zip
Don't superfluously emit prompts when terminating processes in Eshell
* lisp/eshell/esh-proc.el (eshell-kill-process-function): Only reset the prompt if PROC is writing to the terminal. (eshell-sentinel): Only write the exit message if PROC is writing to the terminal (bug#54136). * test/lisp/eshell/esh-proc-tests.el (esh-proc-test/kill-pipeline) (esh-proc-test/kill-pipeline-head) (esh-proc-test/kill-background-process): New tests.
Diffstat (limited to 'lisp/eshell')
-rw-r--r--lisp/eshell/esh-proc.el16
1 files changed, 12 insertions, 4 deletions
diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el
index d7d22d2a9ef..70426ccaf2a 100644
--- a/lisp/eshell/esh-proc.el
+++ b/lisp/eshell/esh-proc.el
@@ -102,6 +102,7 @@ information, for example."
"A list of the current status of subprocesses.")
(declare-function eshell-send-eof-to-process "esh-mode")
+(declare-function eshell-tail-process "esh-cmd")
(defvar-keymap eshell-proc-mode-map
"C-c M-i" #'eshell-insert-process
@@ -119,7 +120,9 @@ Runs `eshell-reset-after-proc' and `eshell-kill-hook', passing arguments
PROC and STATUS to functions on the latter."
;; Was there till 24.1, but it is not optional.
(remove-hook 'eshell-kill-hook #'eshell-reset-after-proc)
- (eshell-reset-after-proc status)
+ ;; Only reset the prompt if this process is running interactively.
+ (when (eq proc (eshell-tail-process))
+ (eshell-reset-after-proc status))
(run-hook-with-args 'eshell-kill-hook proc status))
(define-minor-mode eshell-proc-mode
@@ -414,7 +417,7 @@ PROC is the process that's exiting. STRING is the exit message."
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
(unwind-protect
- (let* ((entry (assq proc eshell-process-list)))
+ (let ((entry (assq proc eshell-process-list)))
; (if (not entry)
; (error "Sentinel called for unowned process `%s'"
; (process-name proc))
@@ -422,8 +425,13 @@ PROC is the process that's exiting. STRING is the exit message."
(unwind-protect
(progn
(unless (string= string "run")
- (unless (string-match "^\\(finished\\|exited\\)" string)
- (eshell-insertion-filter proc string))
+ ;; Write the exit message if the status is
+ ;; abnormal and the process is already writing
+ ;; to the terminal.
+ (when (and (eq proc (eshell-tail-process))
+ (not (string-match "^\\(finished\\|exited\\)"
+ string)))
+ (funcall (process-filter proc) proc string))
(let ((handles (nth 1 entry))
(str (prog1 (nth 3 entry)
(setf (nth 3 entry) nil)))