* lisp/comint.el (comint-after-pmark-p): Check if buffer has a live process.

Return nil if not.
(comint-history-isearch-setup): Don't check if process is live.
Always check if shell prompt is empty regardless of the value
of comint-history-isearch. (Bug#30187)
This commit is contained in:
Juri Linkov 2018-02-10 23:46:13 +02:00
parent 7f6153d956
commit aaeb101d89

View file

@ -1448,17 +1448,18 @@ If nil, Isearch operates on the whole comint buffer."
(defun comint-history-isearch-setup ()
"Set up a comint for using Isearch to search the input history.
Intended to be added to `isearch-mode-hook' in `comint-mode'."
(when (and (get-buffer-process (current-buffer))
(or (eq comint-history-isearch t)
(and (eq comint-history-isearch 'dwim)
;; Point is at command line.
(comint-after-pmark-p)
;; Prompt is not empty like in Async Shell Command buffers
(not (eq (save-excursion
(goto-char (comint-line-beginning-position))
(forward-line 0)
(point))
(comint-line-beginning-position))))))
(when (and
;; Prompt is not empty like in Async Shell Command buffers
;; or in finished shell buffers
(not (eq (save-excursion
(goto-char (comint-line-beginning-position))
(forward-line 0)
(point))
(comint-line-beginning-position)))
(or (eq comint-history-isearch t)
(and (eq comint-history-isearch 'dwim)
;; Point is at command line.
(comint-after-pmark-p))))
(setq isearch-message-prefix-add "history ")
(setq-local isearch-search-fun-function
#'comint-history-isearch-search)
@ -2288,8 +2289,10 @@ If this takes us past the end of the current line, don't skip at all."
(defun comint-after-pmark-p ()
"Return t if point is after the process output marker."
(let ((pmark (process-mark (get-buffer-process (current-buffer)))))
(<= (marker-position pmark) (point))))
(let ((process (get-buffer-process (current-buffer))))
(when process
(let ((pmark (process-mark process)))
(<= (marker-position pmark) (point))))))
(defun comint-simple-send (proc string)
"Default function for sending to PROC input STRING.