summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiha Rihtaršič <miha@kamnitnik.top>2021-10-18 15:24:54 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2021-10-18 15:24:54 +0200
commita6f156a7b03e410c044ad96f1ba16645d451c083 (patch)
treec71d524548c898cb28f3e06df8d3e5a87a045eaf
parentf3c5a1b3685debefb9c019f96992b887f6ca69f2 (diff)
downloademacs-a6f156a7b03e410c044ad96f1ba16645d451c083.tar.gz
*-watch-for-password-prompt: Use run-at-time to read password
* lisp/comint.el (comint-watch-for-password-prompt): * lisp/eshell/esh-mode.el (eshell-watch-for-password-prompt): * lisp/term.el (term-watch-for-password-prompt): Use run-at-time to read a password (bug#51263).
-rw-r--r--lisp/comint.el18
-rw-r--r--lisp/eshell/esh-mode.el9
-rw-r--r--lisp/term.el9
3 files changed, 29 insertions, 7 deletions
diff --git a/lisp/comint.el b/lisp/comint.el
index a0873c0b6a1..e925b3a4b63 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2455,11 +2455,19 @@ This function could be in the list `comint-output-filter-functions'."
(when (let ((case-fold-search t))
(string-match comint-password-prompt-regexp
(string-replace "\r" "" string)))
- (let ((comint--prompt-recursion-depth (1+ comint--prompt-recursion-depth)))
- (if (> comint--prompt-recursion-depth 10)
- (message "Password prompt recursion too deep")
- (comint-send-invisible
- (string-trim string "[ \n\r\t\v\f\b\a]+" "\n+"))))))
+ ;; Use `run-at-time' in order not to pause execution of the
+ ;; process filter with a minibuffer
+ (run-at-time
+ 0 nil
+ (lambda (current-buf)
+ (with-current-buffer current-buf
+ (let ((comint--prompt-recursion-depth
+ (1+ comint--prompt-recursion-depth)))
+ (if (> comint--prompt-recursion-depth 10)
+ (message "Password prompt recursion too deep")
+ (comint-send-invisible
+ (string-trim string "[ \n\r\t\v\f\b\a]+" "\n+"))))))
+ (current-buffer))))
;; Low-level process communication
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index 98e89037f33..579b01f4d1f 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -940,7 +940,14 @@ This function could be in the list `eshell-output-filter-functions'."
(beginning-of-line)
(if (re-search-forward eshell-password-prompt-regexp
eshell-last-output-end t)
- (eshell-send-invisible))))))
+ ;; Use `run-at-time' in order not to pause execution of
+ ;; the process filter with a minibuffer
+ (run-at-time
+ 0 nil
+ (lambda (current-buf)
+ (with-current-buffer current-buf
+ (eshell-send-invisible)))
+ (current-buffer)))))))
(custom-add-option 'eshell-output-filter-functions
'eshell-watch-for-password-prompt)
diff --git a/lisp/term.el b/lisp/term.el
index dd5457745bd..530b93484ed 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -2409,7 +2409,14 @@ Checks if STRING contains a password prompt as defined by
(when (term-in-line-mode)
(when (let ((case-fold-search t))
(string-match comint-password-prompt-regexp string))
- (term-send-invisible (read-passwd string)))))
+ ;; Use `run-at-time' in order not to pause execution of the
+ ;; process filter with a minibuffer
+ (run-at-time
+ 0 nil
+ (lambda (current-buf)
+ (with-current-buffer current-buf
+ (term-send-invisible (read-passwd string))))
+ (current-buffer)))))
;;; Low-level process communication