[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#74626: 30.0.91; mini buffer password prompt mismatches shell buffer'
From: |
Jim Porter |
Subject: |
bug#74626: 30.0.91; mini buffer password prompt mismatches shell buffer's |
Date: |
Sun, 1 Dec 2024 11:54:05 -0800 |
On 12/1/2024 7:44 AM, Michael Albinus via Bug reports for GNU Emacs, the
Swiss army knife of text editors wrote:
- comint-password-prompt-regexp uses "'s" in order to search for a password
prompt. That's fine for password prompts like "van@192.168.1.144's
password:", however, everything before this "'s" is ignored when the
minibuffer prompt is assembled.
[snip]
The problem does not happen with Emacs 29. The culprit seems to be
commit 1a55e957ae57, which has changed the implementation of
comint-watch-for-password-prompt. The appended patch fixes this for me
in Emacs 30. Could you, please, check?
Jim, do you have a comment?
My goal with the previous change (aside from the
'comint-password-prompt-max-length' stuff) was just to make sure that we
don't show extraneous lines in the minibuffer that aren't part of the
prompt. For example, consider a script like this:
#!/bin/sh
cat some-large-file.txt
echo "Enter password: "
read PASSWORD
# ...
The minibuffer would show (some of) the output of "some-large-file.txt".
My hope was to use the matched result from
'comint-password-prompt-regexp' to do this, though apparently sometimes
that regexp doesn't match the *whole* password prompt (e.g. in the "'s"
case you identified). For Emacs 30, maybe the simplest fix is something
like so? That should restore the old behavior, warts and all:
----------------------------------------
diff --git a/lisp/comint.el b/lisp/comint.el
index 4268fa8dad2..a6b078b685b 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2574,8 +2574,7 @@ comint-watch-for-password-prompt
(when (let ((case-fold-search t))
(string-match comint-password-prompt-regexp
(string-replace "\r" "" string)))
- (setq prompt (string-trim (match-string 0 string)
- "[ \n\r\t\v\f\b\a]+" "\n+"))
+ (setq prompt (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
----------------------------------------
For the master branch, I think your patch makes sense, assuming we're
confident that 'comint-password-prompt-regexp' now matches the entire
prompt in all (most?) cases.