diff options
author | Richard M. Stallman <rms@gnu.org> | 1994-02-24 08:02:10 +0000 |
---|---|---|
committer | Richard M. Stallman <rms@gnu.org> | 1994-02-24 08:02:10 +0000 |
commit | 1db4cfb25b6fce489973a0a50d1d4c8de37c09d2 (patch) | |
tree | 76be1bd7d7e1386a10ca0b24ed5d3c05d11c88ff /src/fns.c | |
parent | 411acee307d5a03930257fef23a0291fb9535544 (diff) | |
download | emacs-1db4cfb25b6fce489973a0a50d1d4c8de37c09d2.tar.gz |
(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.c | 47 |
1 files 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, |