From 1db4cfb25b6fce489973a0a50d1d4c8de37c09d2 Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Thu, 24 Feb 1994 08:02:10 +0000 Subject: [PATCH] (Fy_or_n_p): Use a popup menu if reached via mouse command. (Fyes_or_no_p): Likewise. --- src/fns.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/fns.c b/src/fns.c index ac42c96037b..5dc7e2d7fea 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, -- 2.39.5