From 8198a224ca825eb71b61e646a4fc6bbe787be4cf Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 22 Nov 2018 17:57:19 +0200 Subject: [PATCH] shell: Fix artifacts when asking for user input Instead of printing a message use set the new prompt so it is carried over when new lines are printed. Unfortunately this has some drawbacks as apparently readline is not really able to redisplay properly if the prompt contain colors. --- src/shared/shell.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/shared/shell.c b/src/shared/shell.c index 89a2e82bc..aabbc5d0e 100644 --- a/src/shared/shell.c +++ b/src/shared/shell.c @@ -562,6 +562,8 @@ void bt_shell_usage() void bt_shell_prompt_input(const char *label, const char *msg, bt_shell_prompt_input_func func, void *user_data) { + char *str; + if (!data.init || data.mode) return; @@ -573,9 +575,11 @@ void bt_shell_prompt_input(const char *label, const char *msg, data.saved_prompt = true; data.saved_func = func; data.saved_user_data = user_data; + asprintf(&str, "[%s] %s ", label, msg); rl_save_prompt(); - bt_shell_printf(COLOR_RED "[%s]" COLOR_OFF " %s ", label, msg); + bt_shell_set_prompt(str); + free(str); } int bt_shell_release_prompt(const char *input) @@ -1209,7 +1213,7 @@ void bt_shell_set_prompt(const char *string) return; rl_set_prompt(string); - bt_shell_printf("\r"); + rl_redisplay(); } static bool input_read(struct io *io, void *user_data) -- 2.47.3