/[emacs]/emacs/lisp/comint.el
ViewVC logotype

Diff of /emacs/lisp/comint.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.301 by monnier, Sun Oct 10 05:06:47 2004 UTC revision 1.302 by rms, Sun Oct 17 06:51:10 2004 UTC
# Line 372  history list.  Default is to save anythi Line 372  history list.  Default is to save anythi
372    "Special hook run before input is sent to the process.    "Special hook run before input is sent to the process.
373  These functions get one argument, a string containing the text to send.")  These functions get one argument, a string containing the text to send.")
374    
375  (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)
376    "Functions to call after output is inserted into the buffer.    "Functions to call after output is inserted into the buffer.
377  One possible function is `comint-postoutput-scroll-to-bottom'.  One possible function is `comint-postoutput-scroll-to-bottom'.
378  These functions get one argument, a string containing the text as originally  These functions get one argument, a string containing the text as originally
# Line 1901  prompt skip is done by skipping text mat Line 1901  prompt skip is done by skipping text mat
1901    
1902  ;; These three functions are for entering text you don't want echoed or  ;; These three functions are for entering text you don't want echoed or
1903  ;; saved -- typically passwords to ftp, telnet, or somesuch.  ;; saved -- typically passwords to ftp, telnet, or somesuch.
1904  ;; Just enter m-x send-invisible and type in your line, or add  ;; Just enter m-x send-invisible and type in your line.
 ;; `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)))  
1905    
1906  (defun send-invisible (&optional prompt)  (defun send-invisible (&optional prompt)
1907    "Read a string without echoing.    "Read a string without echoing.
# Line 1970  Security bug: your string can still be t Line 1912  Security bug: your string can still be t
1912    (interactive "P")                     ; Defeat snooping via C-x ESC ESC    (interactive "P")                     ; Defeat snooping via C-x ESC ESC
1913    (let ((proc (get-buffer-process (current-buffer))))    (let ((proc (get-buffer-process (current-buffer))))
1914      (if proc      (if proc
1915          (let ((str (comint-read-noecho (or prompt "Non-echoed text: ") t)))          (let ((str (read-passwd (or prompt "Non-echoed text: "))))
1916            (if (stringp str)            (if (stringp str)
1917                (progn                (progn
1918                  (comint-snapshot-last-prompt)                  (comint-snapshot-last-prompt)

Legend:
Removed from v.1.301  
changed lines
  Added in v.1.302

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26