Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
b9308c61
Commit
b9308c61
authored
Oct 17, 2004
by
Richard M. Stallman
Browse files
(with-local-quit): Return nil if there's a quit.
(read-passwd): Use with-local-quit. Doc fix.
parent
4c3fca9c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
55 additions
and
47 deletions
+55
-47
lisp/subr.el
lisp/subr.el
+55
-47
No files found.
lisp/subr.el
View file @
b9308c61
...
...
@@ -1212,51 +1212,59 @@ any other non-digit terminates the character code and is then used as input."))
code
))
(
defun
read-passwd
(
prompt
&optional
confirm
default
)
"Read a password, prompting with PROMPT. Echo `.' for each character typed.
End with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line.
If optional CONFIRM is non-nil, read password twice to make sure.
Optional DEFAULT is a default password to use instead of empty input."
(
if
confirm
(
let
(
success
)
(
while
(
not
success
)
(
let
((
first
(
read-passwd
prompt
nil
default
))
(
second
(
read-passwd
"Confirm password: "
nil
default
)))
(
if
(
equal
first
second
)
(
progn
(
and
(
arrayp
second
)
(
clear-string
second
))
(
setq
success
first
))
(
and
(
arrayp
first
)
(
clear-string
first
))
(
and
(
arrayp
second
)
(
clear-string
second
))
(
message
"Password not repeated accurately; please start over"
)
(
sit-for
1
))))
success
)
(
let
((
pass
nil
)
(
c
0
)
(
echo-keystrokes
0
)
(
cursor-in-echo-area
t
))
(
while
(
progn
(
message
"%s%s"
prompt
(
make-string
(
length
pass
)
?.
))
(
setq
c
(
read-char-exclusive
nil
t
))
(
and
(
/=
c
?\r
)
(
/=
c
?\n
)
(
/=
c
?\e
)))
(
clear-this-command-keys
)
(
if
(
=
c
?\C-u
)
(
progn
(
and
(
arrayp
pass
)
(
clear-string
pass
))
(
setq
pass
""
))
(
if
(
and
(
/=
c
?\b
)
(
/=
c
?\177
))
(
let*
((
new-char
(
char-to-string
c
))
(
new-pass
(
concat
pass
new-char
)))
"Read a password, prompting with PROMPT, and return it.
If optional CONFIRM is non-nil, read the password twice to make sure.
Optional DEFAULT is a default password to use instead of empty input.
This function echoes `.' for each character that the user types.
The user ends with RET, LFD, or ESC. DEL or C-h rubs out. C-u kills line.
C-g quits; if `inhibit-quit' was non-nil around this function,
then it returns nil if the user types C-g.
Once the caller uses the password, it can erase the password
by doing (clear-string STRING)."
(
with-local-quit
(
if
confirm
(
let
(
success
)
(
while
(
not
success
)
(
let
((
first
(
read-passwd
prompt
nil
default
))
(
second
(
read-passwd
"Confirm password: "
nil
default
)))
(
if
(
equal
first
second
)
(
progn
(
and
(
arrayp
second
)
(
clear-string
second
))
(
setq
success
first
))
(
and
(
arrayp
first
)
(
clear-string
first
))
(
and
(
arrayp
second
)
(
clear-string
second
))
(
message
"Password not repeated accurately; please start over"
)
(
sit-for
1
))))
success
)
(
let
((
pass
nil
)
(
c
0
)
(
echo-keystrokes
0
)
(
cursor-in-echo-area
t
))
(
while
(
progn
(
message
"%s%s"
prompt
(
make-string
(
length
pass
)
?.
))
(
setq
c
(
read-char-exclusive
nil
t
))
(
and
(
/=
c
?\r
)
(
/=
c
?\n
)
(
/=
c
?\e
)))
(
clear-this-command-keys
)
(
if
(
=
c
?\C-u
)
(
progn
(
and
(
arrayp
pass
)
(
clear-string
pass
))
(
clear-string
new-char
)
(
setq
c
?\0
)
(
setq
pass
new-pass
))
(
if
(
>
(
length
pass
)
0
)
(
let
((
new-pass
(
substring
pass
0
-1
)))
(
setq
pass
""
))
(
if
(
and
(
/=
c
?\b
)
(
/=
c
?\177
))
(
let*
((
new-char
(
char-to-string
c
))
(
new-pass
(
concat
pass
new-char
)))
(
and
(
arrayp
pass
)
(
clear-string
pass
))
(
setq
pass
new-pass
))))))
(
message
nil
)
(
or
pass
default
""
))))
(
clear-string
new-char
)
(
setq
c
?\0
)
(
setq
pass
new-pass
))
(
if
(
>
(
length
pass
)
0
)
(
let
((
new-pass
(
substring
pass
0
-1
)))
(
and
(
arrayp
pass
)
(
clear-string
pass
))
(
setq
pass
new-pass
))))))
(
message
nil
)
(
or
pass
default
""
)))))
;; This should be used by `call-interactively' for `n' specs.
(
defun
read-number
(
prompt
&optional
default
)
...
...
@@ -1822,14 +1830,14 @@ See also `with-temp-file' and `with-output-to-string'."
(
defmacro
with-local-quit
(
&rest
body
)
"Execute BODY, allowing quits to terminate BODY but not escape further.
When a quit terminates BODY, `with-local-quit' re
quests another quit when
it finishes
. That quit will be processed
in turn
, the next time quitting
is a
gain a
llowed."
When a quit terminates BODY, `with-local-quit' re
turns nil but
requests another quit
. That quit will be processed, the next time quitting
is allowed
once again
."
(
declare
(
debug
t
)
(
indent
0
))
`
(
condition-case
nil
(
let
((
inhibit-quit
nil
))
,@
body
)
(
quit
(
setq
quit-flag
t
))))
(
quit
(
setq
quit-flag
t
)
nil
)))
(
defmacro
combine-after-change-calls
(
&rest
body
)
"Execute BODY, but don't call the after-change functions till the end.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment