From 4ee4c94d607270f0c688a6b83e67b3f057cca41a Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Tue, 18 Aug 2020 01:47:57 +0430 Subject: [PATCH] Shell: Respect the 'PROMPT_EOL_MARK' environment variable This allows the users to customise what is shown when a command ends without a newline. --- Shell/Shell.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Shell/Shell.cpp b/Shell/Shell.cpp index d5adf83b250..d4667c236c9 100644 --- a/Shell/Shell.cpp +++ b/Shell/Shell.cpp @@ -1100,11 +1100,20 @@ void Shell::bring_cursor_to_beginning_of_a_line() const } } - Line::VT::apply_style(Line::Style { Line::Style::Background(Line::Style::XtermColor::Cyan), Line::Style::Foreground(Line::Style::XtermColor::Black) }); - putc('%', stderr); - Line::VT::apply_style(Line::Style::reset_style()); + // Black with Cyan background. + constexpr auto default_mark = "\e[30;46m%\e[0m"; + String eol_mark = getenv("PROMPT_EOL_MARK"); + if (eol_mark.is_null()) + eol_mark = default_mark; + size_t eol_mark_length = Line::Editor::actual_rendered_string_metrics(eol_mark).line_lengths.last(); + if (eol_mark_length >= ws.ws_col) { + eol_mark = default_mark; + eol_mark_length = 1; + } - for (auto i = 2; i < ws.ws_col; ++i) + fputs(eol_mark.characters(), stderr); + + for (auto i = 1 + eol_mark_length; i < ws.ws_col; ++i) putc(' ', stderr); putc('\r', stderr);