aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/reader.cpp12
-rw-r--r--src/reader.h3
2 files changed, 11 insertions, 4 deletions
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()
diff --git a/src/reader.h b/src/reader.h
index 0aa10516..874b4711 100644
--- a/src/reader.h
+++ b/src/reader.h
@@ -119,8 +119,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