From e58b1d371fbbb3d9a7a1898fce2d35766493aab0 Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Thu, 12 Oct 2023 18:23:46 -0700 Subject: [PATCH] Reset the Eshell prompt when signaling with no foreground process This fixes a small regression from commit eef32d13da5. * lisp/eshell/esh-proc.el (eshell-reset): Declare here. (eshell-reset-after-proc): Move implementation to... (eshell--reset-after-signal): ... here... (eshell-interrupt-process, eshell-kill-process eshell-quit-process) (eshell-stop-process, eshell-continue-process): ... and call it. --- lisp/eshell/esh-proc.el | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el index 126c7d0f26e..bc3776259a7 100644 --- a/lisp/eshell/esh-proc.el +++ b/lisp/eshell/esh-proc.el @@ -113,6 +113,7 @@ subjob. To add or remove elements of this list, see `eshell-record-process-object' and `eshell-remove-process-entry'.") +(declare-function eshell-reset "esh-mode" (&optional no-hooks)) (declare-function eshell-send-eof-to-process "esh-mode") (declare-function eshell-interactive-filter "esh-mode" (buffer string)) (declare-function eshell-tail-process "esh-cmd") @@ -150,16 +151,8 @@ PROC and STATUS to functions on the latter." (make-local-variable 'eshell-process-list) (eshell-proc-mode)) -(defun eshell-reset-after-proc (status) - "Reset the command input location after a process terminates. -The signals which will cause this to happen are matched by -`eshell-reset-signals'." - (declare (obsolete nil "30.1")) - (when (and (stringp status) - (string-match eshell-reset-signals status)) - (require 'esh-mode) - (declare-function eshell-reset "esh-mode" (&optional no-hooks)) - (eshell-reset))) +(define-obsolete-function-alias 'eshell-reset-after-proc + 'eshell--reset-after-signal "30.1") (defun eshell-process-active-p (process) "Return non-nil if PROCESS is active. @@ -649,29 +642,41 @@ See the variable `eshell-kill-processes-on-exit'." (kill-buffer buf))) (message nil)))) +(defun eshell--reset-after-signal (status) + "Reset the prompt after a signal when necessary. +STATUS is the status associated with the signal; if +`eshell-reset-signals' matches status, reset the prompt. + +This is really only useful when \"signaling\" while there's no +foreground process. Otherwise, `eshell-resume-command' handles +everything." + (when (and (stringp status) + (string-match eshell-reset-signals status)) + (eshell-reset))) + (defun eshell-interrupt-process () "Interrupt a process." (interactive) (unless (eshell-process-interact 'interrupt-process) - (run-hook-with-args 'eshell-kill-hook nil "interrupt"))) + (eshell--reset-after-signal "interrupt\n"))) (defun eshell-kill-process () "Kill a process." (interactive) (unless (eshell-process-interact 'kill-process) - (run-hook-with-args 'eshell-kill-hook nil "killed"))) + (eshell--reset-after-signal "killed\n"))) (defun eshell-quit-process () "Send quit signal to process." (interactive) (unless (eshell-process-interact 'quit-process) - (run-hook-with-args 'eshell-kill-hook nil "quit"))) + (eshell--reset-after-signal "quit\n"))) ;(defun eshell-stop-process () ; "Send STOP signal to process." ; (interactive) ; (unless (eshell-process-interact 'stop-process) -; (run-hook-with-args 'eshell-kill-hook nil "stopped"))) +; (eshell--reset-after-signal "stopped\n"))) ;(defun eshell-continue-process () ; "Send CONTINUE signal to process." @@ -680,7 +685,7 @@ See the variable `eshell-kill-processes-on-exit'." ; ;; jww (1999-09-17): this signal is not dealt with yet. For ; ;; example, `eshell-reset' will be called, and so will ; ;; `eshell-resume-eval'. -; (run-hook-with-args 'eshell-kill-hook nil "continue"))) +; (eshell--reset-after-signal "continue\n"))) (provide 'esh-proc) ;;; esh-proc.el ends here -- 2.39.2