From fe0bd1428b45ba2c4778b09db7553bbc09d3b594 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Sun, 17 Oct 2004 06:51:10 +0000 Subject: [PATCH] (comint-output-filter-functions): Add comint-watch-for-password-prompt. (comint-read-noecho): Function deleted. (send-invisible): Use read-passwd. --- lisp/comint.el | 64 +++------------------------------------------------------- 1 file changed, 3 insertions(+), 61 deletions(-) diff --git a/lisp/comint.el b/lisp/comint.el index 8b2c779ecd3..cfbd618c896 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -372,7 +372,7 @@ history list. Default is to save anything that isn't all whitespace.") "Special hook run before input is sent to the process. These functions get one argument, a string containing the text to send.") -(defvar comint-output-filter-functions '(comint-postoutput-scroll-to-bottom) +(defvar comint-output-filter-functions '(comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt) "Functions to call after output is inserted into the buffer. One possible function is `comint-postoutput-scroll-to-bottom'. These functions get one argument, a string containing the text as originally @@ -1901,65 +1901,7 @@ prompt skip is done by skipping text matching the regular expression ;; These three functions are for entering text you don't want echoed or ;; saved -- typically passwords to ftp, telnet, or somesuch. -;; Just enter m-x send-invisible and type in your line, or add -;; `comint-watch-for-password-prompt' to `comint-output-filter-functions'. - -(defun comint-read-noecho (prompt &optional stars) - "Read a single line of text from user without echoing, and return it. -Prompt with argument PROMPT, a string. Optional argument STARS causes -input to be echoed with '*' characters on the prompt line. Input ends with -RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line. C-g aborts (if -`inhibit-quit' is set because e.g. this function was called from a process -filter and C-g is pressed, this function returns nil rather than a string). - -Note that the keystrokes comprising the text can still be recovered -\(temporarily) with \\[view-lossage]. Some people find this worrisome (see, -however, `clear-this-command-keys'). -Once the caller uses the password, it can erase the password -by doing (clear-string STRING)." - (let ((ans "") - (newans nil) - (c 0) - (echo-keystrokes 0) - (cursor-in-echo-area t) - (message-log-max nil) - (done nil)) - (while (not done) - (if stars - (message "%s%s" prompt (make-string (length ans) ?*)) - (message "%s" prompt)) - ;; Use this instead of `read-char' to avoid "Non-character input-event". - (setq c (read-char-exclusive)) - (cond ((= c ?\C-g) - ;; This function may get called from a process filter, where - ;; inhibit-quit is set. In later versions of emacs read-char - ;; may clear quit-flag itself and return C-g. That would make - ;; it impossible to quit this loop in a simple way, so - ;; re-enable it here (for backward-compatibility the check for - ;; quit-flag below would still be necessary, so this seems - ;; like the simplest way to do things). - (setq quit-flag t - done t)) - ((or (= c ?\r) (= c ?\n) (= c ?\e)) - (setq done t)) - ((= c ?\C-u) - (clear-string ans) - (setq ans "")) - ((and (/= c ?\b) (/= c ?\177)) - (setq newans (concat ans (char-to-string c))) - (clear-string ans) - (setq ans newans)) - ((> (length ans) 0) - (aset ans (1- (length ans)) 0) - (setq ans (substring ans 0 -1))))) - (if quit-flag - ;; Emulate a true quit, except that we have to return a value. - (prog1 - (setq quit-flag nil) - (message "Quit") - (beep t)) - (message "") - ans))) +;; Just enter m-x send-invisible and type in your line. (defun send-invisible (&optional prompt) "Read a string without echoing. @@ -1970,7 +1912,7 @@ Security bug: your string can still be temporarily recovered with (interactive "P") ; Defeat snooping via C-x ESC ESC (let ((proc (get-buffer-process (current-buffer)))) (if proc - (let ((str (comint-read-noecho (or prompt "Non-echoed text: ") t))) + (let ((str (read-passwd (or prompt "Non-echoed text: ")))) (if (stringp str) (progn (comint-snapshot-last-prompt) -- 2.11.4.GIT