]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow recursive minibuffers for yes-or-no-p and y-or-n-p (bug#17272 bug#19064)
authorJuri Linkov <juri@linkov.net>
Tue, 26 Nov 2019 23:18:17 +0000 (01:18 +0200)
committerJuri Linkov <juri@linkov.net>
Tue, 26 Nov 2019 23:18:17 +0000 (01:18 +0200)
* lisp/subr.el (y-or-n-p): Let-bind enable-recursive-minibuffers to t.

* src/fns.c (Fyes_or_no_p): Specbind Qenable_recursive_minibuffers to Qt.

lisp/subr.el
src/fns.c

index fe55566b52dd2594fe239dae7a77d638529f9b76..01f4f531b1439ccf4d6988f9a3abf56ae42498d7 100644 (file)
@@ -2847,6 +2847,7 @@ is nil and `use-dialog-box' is non-nil."
      (t
       (setq prompt (funcall padded prompt))
       (let* ((empty-history '())
+             (enable-recursive-minibuffers t)
              (str (read-from-minibuffer
                    prompt nil
                    (make-composed-keymap y-or-n-p-map query-replace-map)
index cbb6879223db65bde0f1953fb85114706e85b241..3ae3192b3d5f84cf8fceca4d3ae9e53c38861a5e 100644 (file)
--- a/src/fns.c
+++ b/src/fns.c
@@ -2805,15 +2805,18 @@ if `last-nonmenu-event' is nil, and `use-dialog-box' is non-nil.  */)
   AUTO_STRING (yes_or_no, "(yes or no) ");
   prompt = CALLN (Fconcat, prompt, yes_or_no);
 
+  ptrdiff_t count = SPECPDL_INDEX ();
+  specbind (Qenable_recursive_minibuffers, Qt);
+
   while (1)
     {
       ans = Fdowncase (Fread_from_minibuffer (prompt, Qnil, Qnil, Qnil,
                                              Qyes_or_no_p_history, Qnil,
                                              Qnil));
       if (SCHARS (ans) == 3 && !strcmp (SSDATA (ans), "yes"))
-       return Qt;
+       return unbind_to (count, Qt);
       if (SCHARS (ans) == 2 && !strcmp (SSDATA (ans), "no"))
-       return Qnil;
+       return unbind_to (count, Qnil);
 
       Fding (Qnil);
       Fdiscard_input ();