Процесс перезапуска выполняется в eshell в emacs

Я начал процесс python в eshell:

python app.py

я хочу перезапустить это с функцией elisp, я думаю comint-quit-subjob когда выполняется с C-c C-\ убивает процесс, но все мои попытки выполнить comint-quit-subjob провалился

Это то, что я имею до сих пор:

(defun restart-app()
  (with-current-buffer "*eshell*"
    (interactive)
    (comint-quit-subjob)
    (eshell-return-to-prompt)
    (insert "python app.py")
    (eshell-send-input))
)

Надеюсь, это дает толчок тому, что я пытаюсь, но это не удается. Есть идеи?

1 ответ

Я бы посоветовал искать способ убить процесс с помощью eshell-ish (я сам не являюсь пользователем eshell). Comint пытается найти что-то в буфере. Вы можете обойти это, делая что-то вроде этого (но оно хрупкое и нелегкое):

(defun restart-app()
  (with-current-buffer "*eshell*"
    (interactive)
    (kill-process nil comint-ptyp)
    (run-with-timer 0.5 nil
                    (lambda ()
                      (with-current-buffer "*eshell*"
                        (goto-char (point-max))
                        (insert "python app.py")
                        (eshell-send-input)))))
Другие вопросы по тегам