Как то так?
(defun my-comint-send-input-maybe ()
"Only `comint-send-input' when point is after the latest prompt.
Otherwise move to the end of the buffer."
(interactive)
(let ((proc (get-buffer-process (current-buffer))))
(if (and proc (>= (point) (marker-position (process-mark proc))))
(comint-send-input)
(goto-char (point-max)))))
(with-eval-after-load "comint"
(define-key shell-mode-map [remap comint-send-input] 'my-comint-send-input-maybe))
Вы можете заменить (goto-char (point-max))
на (comint-copy-old-input)
на вставить , но не отправить старый ввод в новом приглашении; но это все еще может вызвать проблемы, когда вставленный ввод выглядит как вывод.
Тем не менее, также обратите внимание на комментарии и ссылку в Ch f comint-send-input
относительно comint-get-old-input
- это может быть использовано для реализации пользовательской логики для определения «старого» ввода "должно быть, когда comint-send-input
вызывается с точкой перед меткой процесса.