summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lispref/minibuf.texi6
-rw-r--r--lisp/subr.el4
-rw-r--r--src/fns.c11
3 files changed, 19 insertions, 2 deletions
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index 5d59387fb1f..ff12808762f 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -2200,6 +2200,9 @@ the expected answers (@kbd{y}, @kbd{n}, @kbd{@key{SPC}},
@kbd{@key{DEL}}, or something that quits), the function responds
@samp{Please answer y or n.}, and repeats the request.
+If @var{prompt} is a non-empty string, and it ends with a non-space
+character, a @samp{SPC} character will be appended to it.
+
This function actually uses the minibuffer, but does not allow editing
of the answer. The cursor moves to the minibuffer while the question
is being asked.
@@ -2240,6 +2243,9 @@ minibuffer, followed by the value of @code{yes-or-no-prompt} @w{(default
responses; otherwise, the function responds @w{@samp{Please answer yes or
no.}}, waits about two seconds and repeats the request.
+If @var{prompt} is a non-empty string, and it ends with a non-space
+character, a @samp{SPC} character will be appended to it.
+
@code{yes-or-no-p} requires more work from the user than
@code{y-or-n-p} and is appropriate for more crucial decisions.
diff --git a/lisp/subr.el b/lisp/subr.el
index 0501fc67a3e..a52abb38772 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3590,7 +3590,9 @@ confusing to some users.")
Return t if answer is \"y\" and nil if it is \"n\".
PROMPT is the string to display to ask the question; `y-or-n-p'
-adds \"(y or n) \" to it.
+adds \"(y or n) \" to it. If PROMPT is a non-empty string, and
+it ends with a non-space character, a space character will be
+appended to it.
If you bind the variable `help-form' to a non-nil value
while calling this function, then pressing `help-char'
diff --git a/src/fns.c b/src/fns.c
index bb6efdda655..561f526f8d0 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -26,6 +26,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include <intprops.h>
#include <vla.h>
#include <errno.h>
+#include <ctype.h>
#include "lisp.h"
#include "bignum.h"
@@ -3202,7 +3203,9 @@ DEFUN ("yes-or-no-p", Fyes_or_no_p, Syes_or_no_p, 1, 1, 0,
Return t if answer is yes, and nil if the answer is no.
PROMPT is the string to display to ask the question; `yes-or-no-p'
-appends `yes-or-no-prompt' (default \"(yes or no) \") to it.
+appends `yes-or-no-prompt' (default \"(yes or no) \") to it. If
+PROMPT is a non-empty string, and it ends with a non-space character,
+a space character will be appended to it.
The user must confirm the answer with RET, and can edit it until it
has been confirmed.
@@ -3234,6 +3237,12 @@ if `last-nonmenu-event' is nil, and `use-dialog-box' is non-nil. */)
if (use_short_answers)
return call1 (intern ("y-or-n-p"), prompt);
+ {
+ char *s = SSDATA (prompt);
+ ptrdiff_t len = strlen (s);
+ if ((len > 0) && !isspace (s[len - 1]))
+ prompt = CALLN (Fconcat, prompt, build_string (" "));
+ }
prompt = CALLN (Fconcat, prompt, Vyes_or_no_prompt);
specpdl_ref count = SPECPDL_INDEX ();