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
This commit is contained in:
ridiculousfish 2016-04-29 12:14:10 -07:00
parent 09bb713989
commit 8e19c82e09
2 changed files with 11 additions and 4 deletions

View file

@ -873,7 +873,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");
@ -944,6 +944,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");
}
}
/**
@ -1002,8 +1006,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()

View file

@ -117,8 +117,9 @@ void reader_pop_current_filename();
finishes.
\param cmd Command line string passed to \c fish_title if is defined.
\param reset_cursor_position If set, issue a \r so the line driver knows where we are
*/
void reader_write_title(const wcstring &cmd);
void reader_write_title(const wcstring &cmd, bool reset_cursor_position = true);
/**
Call this function to tell the reader that a repaint is needed, and