diff --git a/Shell/Shell.cpp b/Shell/Shell.cpp index 33b16074bb..d5adf83b25 100644 --- a/Shell/Shell.cpp +++ b/Shell/Shell.cpp @@ -1087,9 +1087,33 @@ Vector Shell::complete_option(const String& program_ return suggestions; } +void Shell::bring_cursor_to_beginning_of_a_line() const +{ + struct winsize ws; + if (editor) { + ws = editor->terminal_size(); + } else { + if (ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) < 0) { + // Very annoying assumptions. + ws.ws_col = 80; + ws.ws_row = 25; + } + } + + 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()); + + for (auto i = 2; i < ws.ws_col; ++i) + putc(' ', stderr); + + putc('\r', stderr); +} + bool Shell::read_single_line() { restore_ios(); + bring_cursor_to_beginning_of_a_line(); auto line_result = editor->get_line(prompt()); if (line_result.is_error()) { diff --git a/Shell/Shell.h b/Shell/Shell.h index 90469303af..c842bbc28b 100644 --- a/Shell/Shell.h +++ b/Shell/Shell.h @@ -187,6 +187,7 @@ private: // ^Core::Object virtual void save_to(JsonObject&) override; + void bring_cursor_to_beginning_of_a_line() const; void cache_path(); void add_entry_to_cache(const String&);