From 74d3aa582bb83c8a44e9989810e4b3eb03e1e11f Mon Sep 17 00:00:00 2001 From: ridiculousfish Date: Fri, 29 Apr 2016 12:14:10 -0700 Subject: Issue a \r in fish_title, except when executing it for the prompt fish_title currently outputs some escaped text, which can confuse the line driver (#2453). Issue a carriage return so the line driver knows we are at the beginning of the line, unless we are writing the title as part of the prompt. In that case, we may have text from the previous command still on the line and we don't want to move the cursor. Fixes #2453 --- src/reader.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/reader.cpp') diff --git a/src/reader.cpp b/src/reader.cpp index 3254b905..fb7cc5f2 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -871,7 +871,7 @@ bool reader_thread_job_is_stale() return (void*)(uintptr_t) s_generation_count != pthread_getspecific(generation_count_key); } -void reader_write_title(const wcstring &cmd) +void reader_write_title(const wcstring &cmd, bool reset_cursor_position) { const env_var_t term_str = env_get_string(L"TERM"); @@ -942,6 +942,10 @@ void reader_write_title(const wcstring &cmd) } proc_pop_interactive(); set_color(rgb_color_t::reset(), rgb_color_t::reset()); + if (reset_cursor_position && ! lst.empty()) { + // Put the cursor back at the beginning of the line #2453 + writestr(L"\r"); + } } /** @@ -1000,8 +1004,10 @@ static void exec_prompt() proc_pop_interactive(); } - /* Write the screen title */ - reader_write_title(L""); + // Write the screen title. + // Do not reset the cursor position: exec_prompt is called when there may still be output + // on the line from the previous command (#2499) and we need our PROMPT_SP hack to work + reader_write_title(L"", false); } void reader_init() -- cgit v1.2.3