[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 944d77f 2/2: Re-add the notion of echo_prompt lost
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] master 944d77f 2/2: Re-add the notion of echo_prompt lost in the translation |
Date: |
Thu, 03 Sep 2015 20:02:33 +0000 |
branch: master
commit 944d77f070da388b0c6e6578a9f868e88c088940
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
Re-add the notion of echo_prompt lost in the translation
* src/keyboard.h (struct kboard): Replace echo_after_prompt with new
echo_prompt which contains the actual string. Update all uses.
* src/keyboard.c (kset_echo_prompt): New function.
(echo_update): Add echo_prompt at the very beginning.
(read_char): Remove workaround for bug#19875, not needed any more.
(read_key_sequence): Set echo_prompt rather than echo_string (bug#21403).
(mark_kboards): Mark echo_prompt.
---
src/keyboard.c | 37 ++++++++++++++++++++-----------------
src/keyboard.h | 5 ++---
2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/src/keyboard.c b/src/keyboard.c
index a8b1e98..eefc033 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -380,6 +380,11 @@ kset_echo_string (struct kboard *kb, Lisp_Object val)
kb->echo_string_ = val;
}
static void
+kset_echo_prompt (struct kboard *kb, Lisp_Object val)
+{
+ kb->echo_prompt_ = val;
+}
+static void
kset_kbd_queue (struct kboard *kb, Lisp_Object val)
{
kb->kbd_queue_ = val;
@@ -501,8 +506,9 @@ echo_dash (void)
return;
/* Do nothing if we just printed a prompt. */
- if (current_kboard->echo_after_prompt
- == SCHARS (KVAR (current_kboard, echo_string)))
+ if (STRINGP (KVAR (current_kboard, echo_prompt))
+ && (SCHARS (KVAR (current_kboard, echo_prompt))
+ == SCHARS (KVAR (current_kboard, echo_string))))
return;
/* Do nothing if we have already put a dash at the end. */
@@ -534,8 +540,12 @@ echo_update (void)
if (current_kboard->immediate_echo)
{
ptrdiff_t i;
+ Lisp_Object prompt = KVAR (current_kboard, echo_prompt);
+ Lisp_Object prefix = call0 (Qinternal_echo_keystrokes_prefix);
kset_echo_string (current_kboard,
- call0 (Qinternal_echo_keystrokes_prefix));
+ NILP (prompt) ? prefix
+ : NILP (prefix) ? prompt
+ : concat2 (prompt, prefix));
for (i = 0; i < this_command_key_count; i++)
{
@@ -584,7 +594,7 @@ void
cancel_echoing (void)
{
current_kboard->immediate_echo = false;
- current_kboard->echo_after_prompt = -1;
+ kset_echo_prompt (current_kboard, Qnil);
kset_echo_string (current_kboard, Qnil);
ok_to_echo_at_next_pause = NULL;
echo_kboard = NULL;
@@ -2942,7 +2952,7 @@ read_char (int commandflag, Lisp_Object map,
bool saved_immediate_echo = current_kboard->immediate_echo;
struct kboard *saved_ok_to_echo = ok_to_echo_at_next_pause;
Lisp_Object saved_echo_string = KVAR (current_kboard, echo_string);
- ptrdiff_t saved_echo_after_prompt = current_kboard->echo_after_prompt;
+ Lisp_Object saved_echo_prompt = KVAR (current_kboard, echo_prompt);
/* Save the this_command_keys status. */
key_count = this_command_key_count;
@@ -2984,15 +2994,8 @@ read_char (int commandflag, Lisp_Object map,
cancel_echoing ();
ok_to_echo_at_next_pause = saved_ok_to_echo;
- /* Do not restore the echo area string when the user is
- introducing a prefix argument. Otherwise we end with
- repetitions of the partially introduced prefix
- argument. (bug#19875) */
- if (NILP (intern ("prefix-arg")))
- {
- kset_echo_string (current_kboard, saved_echo_string);
- }
- current_kboard->echo_after_prompt = saved_echo_after_prompt;
+ kset_echo_string (current_kboard, saved_echo_string);
+ kset_echo_prompt (current_kboard, saved_echo_prompt);
if (saved_immediate_echo)
echo_now ();
@@ -8870,8 +8873,7 @@ read_key_sequence (Lisp_Object *keybuf, int bufsize,
Lisp_Object prompt,
/* Install the string PROMPT as the beginning of the string
of echoing, so that it serves as a prompt for the next
character. */
- kset_echo_string (current_kboard, prompt);
- current_kboard->echo_after_prompt = SCHARS (prompt);
+ kset_echo_prompt (current_kboard, prompt);
echo_now ();
}
else if (cursor_in_echo_area
@@ -10695,7 +10697,7 @@ init_kboard (KBOARD *kb, Lisp_Object type)
kb->kbd_queue_has_data = false;
kb->immediate_echo = false;
kset_echo_string (kb, Qnil);
- kb->echo_after_prompt = -1;
+ kset_echo_prompt (kb, Qnil);
kb->kbd_macro_buffer = 0;
kb->kbd_macro_bufsize = 0;
kset_defining_kbd_macro (kb, Qnil);
@@ -11758,6 +11760,7 @@ mark_kboards (void)
mark_object (KVAR (kb, Vlocal_function_key_map));
mark_object (KVAR (kb, Vdefault_minibuffer_frame));
mark_object (KVAR (kb, echo_string));
+ mark_object (KVAR (kb, echo_prompt));
}
{
union buffered_input_event *event;
diff --git a/src/keyboard.h b/src/keyboard.h
index 3e4c475..0402e0a 100644
--- a/src/keyboard.h
+++ b/src/keyboard.h
@@ -175,9 +175,8 @@ struct kboard
/* True means echo each character as typed. */
bool_bf immediate_echo : 1;
- /* If we have echoed a prompt string specified by the user,
- this is its length in characters. Otherwise this is -1. */
- ptrdiff_t echo_after_prompt;
+ /* If we have a prompt string specified by the user, this is it. */
+ Lisp_Object echo_prompt_;
};
INLINE void