aboutsummaryrefslogtreecommitdiffstats
path: root/src/fns.c
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1994-02-24 08:02:10 +0000
committerRichard M. Stallman <[email protected]>1994-02-24 08:02:10 +0000
commit1db4cfb25b6fce489973a0a50d1d4c8de37c09d2 (patch)
tree76be1bd7d7e1386a10ca0b24ed5d3c05d11c88ff /src/fns.c
parent411acee307d5a03930257fef23a0291fb9535544 (diff)
(Fy_or_n_p): Use a popup menu if reached via mouse command.
(Fyes_or_no_p): Likewise.
Diffstat (limited to 'src/fns.c')
-rw-r--r--src/fns.c47
1 files changed, 41 insertions, 6 deletions
diff --git a/src/fns.c b/src/fns.c
index ac42c96037..5dc7e2d7fe 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1125,13 +1125,27 @@ Also accepts Space to mean yes, or Delete to mean no.")
while (1)
{
- cursor_in_echo_area = 1;
- message ("%s(y or n) ", XSTRING (xprompt)->data);
+ if (NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
+ {
+ Lisp_Object pane, menu;
+ pane = Fcons (Fcons (build_string ("Yes"), Qt),
+ Fcons (Fcons (build_string ("No"), Qnil),
+ Qnil));
+ menu = Fcons (prompt, Fcons (Fcons (prompt, pane), Qnil));
+ obj = Fx_popup_menu (Qt, menu);
+ answer = !NILP (obj);
+ break;
+ }
+ else
+ {
+ cursor_in_echo_area = 1;
+ message ("%s(y or n) ", XSTRING (xprompt)->data);
- obj = read_filtered_event (1, 0, 0);
- cursor_in_echo_area = 0;
- /* If we need to quit, quit with cursor_in_echo_area = 0. */
- QUIT;
+ obj = read_filtered_event (1, 0, 0);
+ cursor_in_echo_area = 0;
+ /* If we need to quit, quit with cursor_in_echo_area = 0. */
+ QUIT;
+ }
key = Fmake_vector (make_number (1), obj);
def = Flookup_key (map, key);
@@ -1209,14 +1223,35 @@ and can edit it until it as been confirmed.")
register Lisp_Object ans;
Lisp_Object args[2];
struct gcpro gcpro1;
+ Lisp_Object menu;
CHECK_STRING (prompt, 0);
+ if (NILP (last_nonmenu_event) || CONSP (last_nonmenu_event))
+ {
+ Lisp_Object pane, menu, obj;
+ pane = Fcons (Fcons (build_string ("Yes"), Qt),
+ Fcons (Fcons (build_string ("No"), Qnil),
+ Qnil));
+ GCPRO1 (pane);
+ menu = Fcons (prompt, Fcons (Fcons (prompt, pane), Qnil));
+ obj = Fx_popup_menu (Qt, menu);
+ if (!NILP (obj))
+ {
+ prompt = build_string ("Confirm");
+ menu = Fcons (prompt, Fcons (Fcons (prompt, pane), Qnil));
+ obj = Fx_popup_menu (Qt, menu);
+ }
+ UNGCPRO;
+ return obj;
+ }
+
args[0] = prompt;
args[1] = build_string ("(yes or no) ");
prompt = Fconcat (2, args);
GCPRO1 (prompt);
+
while (1)
{
ans = Fdowncase (Fread_from_minibuffer (prompt, Qnil, Qnil, Qnil,