summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2016-02-24 15:50:54 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2016-02-24 15:50:54 -0500
commit5244db29158aed4b3430329cbc48c1c925e1c36a (patch)
treeb9f94394e500d91a27df9548e6ce7d2a07c317de
parent9d0b103a45dc3e855bae8cb727797279021131fd (diff)
downloademacs-5244db29158aed4b3430329cbc48c1c925e1c36a.tar.gz
* src/keyboard.c: Don't inadvertently set immediate_echo (bug#22581)
* src/keyboard.c (read_key_sequence): Don't inadvertently set immediate_echo when we don't want any echo-keystrokes. (echo_keystrokes_p): Move earlier.
-rw-r--r--src/keyboard.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index ef86e69bf91..298ab644ab1 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -427,6 +427,15 @@ kset_system_key_syms (struct kboard *kb, Lisp_Object val)
}
+static bool
+echo_keystrokes_p (void)
+{
+ return (!cursor_in_echo_area)
+ && (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0
+ : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0
+ : false);
+}
+
/* Add C to the echo string, without echoing it immediately. C can be
a character, which is pretty-printed, or a symbol, whose name is
printed. */
@@ -568,7 +577,9 @@ echo_update (void)
static void
echo_now (void)
{
- if (!current_kboard->immediate_echo)
+ if (!current_kboard->immediate_echo
+ /* This test breaks calls that use `echo_now' to display the echo_prompt.
+ && echo_keystrokes_p () */)
{
current_kboard->immediate_echo = true;
echo_update ();
@@ -2270,13 +2281,6 @@ read_decoded_event_from_main_queue (struct timespec *end_time,
}
}
-static bool
-echo_keystrokes_p (void)
-{
- return (FLOATP (Vecho_keystrokes) ? XFLOAT_DATA (Vecho_keystrokes) > 0.0
- : INTEGERP (Vecho_keystrokes) ? XINT (Vecho_keystrokes) > 0 : false);
-}
-
/* Read a character from the keyboard; call the redisplay if needed. */
/* commandflag 0 means do not autosave, but do redisplay.
-1 means do not redisplay, but do autosave.
@@ -8890,11 +8894,15 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize, Lisp_Object prompt,
of echoing, so that it serves as a prompt for the next
character. */
kset_echo_prompt (current_kboard, prompt);
+ /* FIXME: This use of echo_now doesn't look quite right and is ugly
+ since it forces us to fiddle with current_kboard->immediate_echo
+ before and after. */
current_kboard->immediate_echo = false;
echo_now ();
+ if (!echo_keystrokes_p ())
+ current_kboard->immediate_echo = false;
}
- else if (cursor_in_echo_area
- && echo_keystrokes_p ())
+ else if (echo_keystrokes_p ())
/* This doesn't put in a dash if the echo buffer is empty, so
you don't always see a dash hanging out in the minibuffer. */
echo_dash ();