aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/reader.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-04-29 12:14:10 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2016-04-29 12:14:10 -0700
commit74d3aa582bb83c8a44e9989810e4b3eb03e1e11f (patch)
tree3ca199d50ee57e3ea4253a0be3d1a2da972d63bb /src/reader.cpp
parent85b136314b468f28651db47ca20d277e6ecbf89e (diff)
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
Diffstat (limited to 'src/reader.cpp')
-rw-r--r--src/reader.cpp12
1 files changed, 9 insertions, 3 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()