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.
This commit is contained in:
parent
aedb74b294
commit
be496f942c
2 changed files with 58 additions and 4 deletions
|
@ -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)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue