diff options
author | Jim Porter <jporterbugs@gmail.com> | 2022-02-23 20:43:38 -0800 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2022-02-24 10:35:54 +0100 |
commit | be496f942cb1a6b9a4b31ae6098cb09166793fec (patch) | |
tree | a55b583e356c2e1a90c49c094893f07da515a99b /lisp/eshell | |
parent | aedb74b2940cffa56c26c142c4bb8c2a7a21839f (diff) | |
download | emacs-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.el | 16 |
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))) |