mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 21:44:16 +00:00
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:
parent
09bb713989
commit
8e19c82e09
2 changed files with 11 additions and 4 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue