summaryrefslogtreecommitdiff
path: root/lisp/comint.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/comint.el')
-rw-r--r--lisp/comint.el38
1 files changed, 25 insertions, 13 deletions
diff --git a/lisp/comint.el b/lisp/comint.el
index 1e4c0d33ee9..838662a59a2 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -364,10 +364,10 @@ This variable is buffer-local."
"\\(?:" (regexp-opt password-word-equivalents) "\\|Response\\)"
"\\(?:\\(?:, try\\)? *again\\| (empty for no passphrase)\\| (again)\\)?"
;; "[[:alpha:]]" used to be "for", which fails to match non-English.
- "\\(?: [[:alpha:]]+ .+\\)?[::៖]\\s *\\'")
+ "\\(?: [[:alpha:]]+ .+\\)?[\\s  ]*[::៖][\\s  ]*\\'")
"Regexp matching prompts for passwords in the inferior process.
This is used by `comint-watch-for-password-prompt'."
- :version "26.1"
+ :version "27.1"
:type 'regexp
:group 'comint)
@@ -1434,24 +1434,32 @@ If nil, Isearch operates on the whole comint buffer."
(defun comint-history-isearch-backward ()
"Search for a string backward in input history using Isearch."
(interactive)
- (let ((comint-history-isearch t))
- (isearch-backward nil t)))
+ (setq comint-history-isearch t)
+ (isearch-backward nil t))
(defun comint-history-isearch-backward-regexp ()
"Search for a regular expression backward in input history using Isearch."
(interactive)
- (let ((comint-history-isearch t))
- (isearch-backward-regexp nil t)))
+ (setq comint-history-isearch t)
+ (isearch-backward-regexp nil t))
(defvar-local comint-history-isearch-message-overlay nil)
(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 (or (eq comint-history-isearch t)
- (and (eq comint-history-isearch 'dwim)
- ;; Point is at command line.
- (comint-after-pmark-p)))
+ (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)
@@ -1472,7 +1480,9 @@ Intended to be added to `isearch-mode-hook' in `comint-mode'."
(setq isearch-message-function nil)
(setq isearch-wrap-function nil)
(setq isearch-push-state-function nil)
- (remove-hook 'isearch-mode-end-hook 'comint-history-isearch-end t))
+ (remove-hook 'isearch-mode-end-hook 'comint-history-isearch-end t)
+ (unless isearch-suspended
+ (custom-reevaluate-setting 'comint-history-isearch)))
(defun comint-goto-input (pos)
"Put input history item of the absolute history position POS."
@@ -2279,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.