X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/220613e089ec012ae4ab319637365132ce8dc306..63efcc268635dea78c6bd80749eae4ee2c72d717:/src/keyboard.c diff --git a/src/keyboard.c b/src/keyboard.c index 3431cd8fbd..b8e0a6d88e 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -7,8 +7,8 @@ This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -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. @@ -8889,11 +8893,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 (); @@ -11375,7 +11383,7 @@ See Info node `(elisp)Multiple Terminals'. */); DEFVAR_BOOL ("cannot-suspend", cannot_suspend, doc: /* Non-nil means to always spawn a subshell instead of suspending. -(Even if the operating system has support for stopping a process.) */); +\(Even if the operating system has support for stopping a process.) */); cannot_suspend = false; DEFVAR_BOOL ("menu-prompting", menu_prompting, @@ -11589,7 +11597,7 @@ immediately after running `post-command-hook'. */); DEFVAR_LISP ("input-method-function", Vinput_method_function, doc: /* If non-nil, the function that implements the current input method. It's called with one argument, a printing character that was just read. -(That means a character with code 040...0176.) +\(That means a character with code 040...0176.) Typically this function uses `read-event' to read additional events. When it does so, it should first bind `input-method-function' to nil so it will not be called recursively. @@ -11622,10 +11630,10 @@ It's called with one argument, the help string to display. */); DEFVAR_LISP ("disable-point-adjustment", Vdisable_point_adjustment, doc: /* If non-nil, suppress point adjustment after executing a command. -After a command is executed, if point is moved into a region that has -special properties (e.g. composition, display), we adjust point to -the boundary of the region. But, when a command sets this variable to -non-nil, we suppress the point adjustment. +After a command is executed, if point moved into a region that has +special properties (e.g. composition, display), Emacs adjusts point to +the boundary of the region. But when a command leaves this variable at +a non-nil value (e.g., with a setq), this point adjustment is suppressed. This variable is set to nil before reading a command, and is checked just after executing the command. */); @@ -11633,11 +11641,11 @@ just after executing the command. */); DEFVAR_LISP ("global-disable-point-adjustment", Vglobal_disable_point_adjustment, - doc: /* If non-nil, always suppress point adjustment. + doc: /* If non-nil, always suppress point adjustments. -The default value is nil, in which case, point adjustment are -suppressed only after special commands that set -`disable-point-adjustment' (which see) to non-nil. */); +The default value is nil, in which case point adjustments are +suppressed only after special commands that leave +`disable-point-adjustment' (which see) at a non-nil value. */); Vglobal_disable_point_adjustment = Qnil; DEFVAR_LISP ("minibuffer-message-timeout", Vminibuffer_message_timeout,