[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 5aadb87d6f6: Fix 'use-dialog-box-p' and friends
From: |
Eli Zaretskii |
Subject: |
emacs-29 5aadb87d6f6: Fix 'use-dialog-box-p' and friends |
Date: |
Tue, 23 May 2023 10:44:38 -0400 (EDT) |
branch: emacs-29
commit 5aadb87d6f6e3d9d755d4b6f6d124040c1bcfeee
Author: Eli Zaretskii <eliz@gnu.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Fix 'use-dialog-box-p' and friends
* lisp/subr.el (use-dialog-box-p): Use dialog boxes also when
invoked from some window-system gesture. (Bug#63655)
(y-or-n-p): Fix the description in the doc string of conditions
under which a dialog box will be used.
* src/fns.c (Fyes_or_no_p): Use the same condition for dialog
boxes as in 'use-dialog-box-p'. Fix the description in the doc
string of conditions under which a dialog box will be used.
* doc/lispref/minibuf.texi (Multiple Queries, Yes-or-No Queries):
Fix the description of conditions under which a dialog box will be
used.
---
doc/lispref/minibuf.texi | 30 ++++++++++++++++--------------
lisp/subr.el | 7 +++++--
src/fns.c | 16 +++++++++++-----
3 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/doc/lispref/minibuf.texi b/doc/lispref/minibuf.texi
index a4916ecda30..9a386ff310d 100644
--- a/doc/lispref/minibuf.texi
+++ b/doc/lispref/minibuf.texi
@@ -2174,13 +2174,14 @@ will not have serious consequences. @code{yes-or-no-p}
is suitable for
more momentous questions, since it requires three or four characters to
answer.
- If either of these functions is called in a command that was invoked
-using the mouse---more precisely, if @code{last-nonmenu-event}
-(@pxref{Command Loop Info}) is either @code{nil} or a list---then it
-uses a dialog box or pop-up menu to ask the question. Otherwise, it
-uses keyboard input. You can force use either of the mouse or of keyboard
-input by binding @code{last-nonmenu-event} to a suitable value around
-the call.
+ If either of these functions is called in a command that was
+invoked using the mouse or some other window-system gesture, or in a
+command invoked via a menu, then they use a dialog box or pop-up menu
+to ask the question if dialog boxes are supported. Otherwise, they
+use keyboard input. You can force use either of the mouse or of
+keyboard input by binding @code{last-nonmenu-event} to a suitable
+value around the call---bind it to @code{t} to force keyboard
+interaction, and to a list to force dialog boxes.
Both @code{yes-or-no-p} and @code{y-or-n-p} use the minibuffer.
@@ -2378,13 +2379,14 @@ Normally, @code{map-y-or-n-p} binds
@code{cursor-in-echo-area} while
prompting. But if @var{no-cursor-in-echo-area} is non-@code{nil}, it
does not do that.
-If @code{map-y-or-n-p} is called in a command that was invoked using the
-mouse---more precisely, if @code{last-nonmenu-event} (@pxref{Command
-Loop Info}) is either @code{nil} or a list---then it uses a dialog box
-or pop-up menu to ask the question. In this case, it does not use
-keyboard input or the echo area. You can force use either of the mouse or
-of keyboard input by binding @code{last-nonmenu-event} to a suitable
-value around the call.
+If @code{map-y-or-n-p} is called in a command that was invoked using
+the mouse or some other window-system gesture, or a command invoked
+via a menu, then it uses a dialog box or pop-up menu to ask the
+question if dialog boxes are supported. In this case, it does not use
+keyboard input or the echo area. You can force use either of the
+mouse or of keyboard input by binding @code{last-nonmenu-event} to a
+suitable value around the call---bind it to @code{t} to force keyboard
+interaction, and to a list to force dialog boxes.
The return value of @code{map-y-or-n-p} is the number of objects acted on.
@end defun
diff --git a/lisp/subr.el b/lisp/subr.el
index 52227b5261c..950902039b1 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -3544,6 +3544,8 @@ confusing to some users.")
"Return non-nil if the current command should prompt the user via a dialog
box."
(and last-input-event ; not during startup
(or (consp last-nonmenu-event) ; invoked by a mouse event
+ (and (null last-nonmenu-event)
+ (consp last-input-event))
from--tty-menu-p) ; invoked via TTY menu
use-dialog-box))
@@ -3574,8 +3576,9 @@ If the user enters `recenter', `scroll-up', or
`scroll-down'
responses, perform the requested window recentering or scrolling
and ask again.
-Under a windowing system a dialog box will be used if `last-nonmenu-event'
-is nil and `use-dialog-box' is non-nil.
+If dialog boxes are supported, this function will use a dialog box
+if `use-dialog-box' is non-nil and the last input event was produced
+by a mouse, or by some window-system gesture, or via a menu.
By default, this function uses the minibuffer to read the key.
If `y-or-n-p-use-read-key' is non-nil, `read-key' is used
diff --git a/src/fns.c b/src/fns.c
index e8cd6211d6d..2ed62d6e8c6 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -3185,16 +3185,21 @@ has been confirmed.
If the `use-short-answers' variable is non-nil, instead of asking for
\"yes\" or \"no\", this function will ask for \"y\" or \"n\".
-If dialog boxes are supported, a dialog box will be used
-if `last-nonmenu-event' is nil, and `use-dialog-box' is non-nil. */)
+If dialog boxes are supported, this function will use a dialog box
+if `use-dialog-box' is non-nil and the last input event was produced
+by a mouse, or by some window-system gesture, or via a menu. */)
(Lisp_Object prompt)
{
- Lisp_Object ans;
+ Lisp_Object ans, val;
CHECK_STRING (prompt);
- if ((NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
- && use_dialog_box && ! NILP (last_input_event))
+ if (!NILP (last_input_event)
+ && (CONSP (last_nonmenu_event)
+ || (NILP (last_nonmenu_event) && CONSP (last_input_event))
+ || (val = find_symbol_value (Qfrom__tty_menu_p),
+ (!NILP (val) && !EQ (val, Qunbound))))
+ && use_dialog_box)
{
Lisp_Object pane, menu, obj;
redisplay_preserve_echo_area (4);
@@ -6358,4 +6363,5 @@ The same variable also affects the function
`read-answer'. */);
defsubr (&Sbuffer_line_statistics);
DEFSYM (Qreal_this_command, "real-this-command");
+ DEFSYM (Qfrom__tty_menu_p, "from--tty-menu-p");
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-29 5aadb87d6f6: Fix 'use-dialog-box-p' and friends,
Eli Zaretskii <=