shared/shell: Fix artifacts related to prompt
Both bt_shell_prompt_input and bt_shell_input could cause the prompt to
be printed incorrectly, so they now rely on bt_shell_printf which
properly check if input and prompt shall be saved/restored.
diff --git a/src/shared/shell.c b/src/shared/shell.c
index be2a8df..9395598 100644
--- a/src/shared/shell.c
+++ b/src/shared/shell.c
@@ -475,7 +475,8 @@
if (save_input) {
saved_point = rl_point;
saved_line = rl_copy_text(0, rl_end);
- rl_save_prompt();
+ if (!data.saved_prompt)
+ rl_save_prompt();
rl_replace_line("", 0);
rl_redisplay();
}
@@ -485,7 +486,8 @@
va_end(args);
if (save_input) {
- rl_restore_prompt();
+ if (!data.saved_prompt)
+ rl_restore_prompt();
rl_replace_line(saved_line, 0);
rl_point = saved_point;
rl_forced_update_display();
@@ -523,12 +525,12 @@
if (data.saved_prompt)
return;
- rl_save_prompt();
- rl_message(COLOR_RED "[%s]" COLOR_OFF " %s ", label, msg);
-
data.saved_prompt = true;
data.saved_func = func;
data.saved_user_data = user_data;
+
+ rl_save_prompt();
+ bt_shell_printf(COLOR_RED "[%s]" COLOR_OFF " %s ", label, msg);
}
int bt_shell_release_prompt(const char *input)
@@ -1085,9 +1087,7 @@
return;
rl_set_prompt(string);
- printf("\r");
- rl_on_new_line();
- rl_redisplay();
+ bt_shell_printf("\r");
}
static bool input_read(struct io *io, void *user_data)