From 444cdb8292f4d22646109d6fef996abef45e23b6 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. Change-Id: Iab1a1f1d485b89e446631b5f1554fbc829359e06 Signed-off-by: himanshu --- src/shared/shell.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/shared/shell.c b/src/shared/shell.c index 89a2e82..25697cb 100644 --- a/src/shared/shell.c +++ b/src/shared/shell.c @@ -562,6 +562,9 @@ 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; + int err; + if (!data.init || data.mode) return; @@ -573,9 +576,16 @@ 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; + err = asprintf(&str, "[%s] %s ", label, msg); + + if (err < 0) { + free(str); + return; + } 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 +1219,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.7.4