mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:27:45 +00:00
LibLine: Redraw the suggestions when terminal size changes
This commit is contained in:
parent
3cfab83e7e
commit
e1e84fe0fe
4 changed files with 34 additions and 9 deletions
|
@ -576,6 +576,20 @@ void Editor::interrupted()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Editor::resized()
|
||||||
|
{
|
||||||
|
m_was_resized = true;
|
||||||
|
m_previous_num_columns = m_num_columns;
|
||||||
|
get_terminal_size();
|
||||||
|
|
||||||
|
reposition_cursor(true);
|
||||||
|
m_suggestion_display->redisplay(m_suggestion_manager, m_num_lines, m_num_columns);
|
||||||
|
reposition_cursor();
|
||||||
|
|
||||||
|
if (m_is_searching)
|
||||||
|
m_search_editor->resized();
|
||||||
|
}
|
||||||
|
|
||||||
void Editor::really_quit_event_loop()
|
void Editor::really_quit_event_loop()
|
||||||
{
|
{
|
||||||
m_finish = false;
|
m_finish = false;
|
||||||
|
|
|
@ -189,15 +189,7 @@ public:
|
||||||
#undef __ENUMERATE_EDITOR_INTERNAL_FUNCTION
|
#undef __ENUMERATE_EDITOR_INTERNAL_FUNCTION
|
||||||
|
|
||||||
void interrupted();
|
void interrupted();
|
||||||
void resized()
|
void resized();
|
||||||
{
|
|
||||||
m_was_resized = true;
|
|
||||||
m_previous_num_columns = m_num_columns;
|
|
||||||
get_terminal_size();
|
|
||||||
m_suggestion_display->set_vt_size(m_num_lines, m_num_columns);
|
|
||||||
if (m_is_searching)
|
|
||||||
m_search_editor->resized();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t cursor() const { return m_cursor; }
|
size_t cursor() const { return m_cursor; }
|
||||||
void set_cursor(size_t cursor)
|
void set_cursor(size_t cursor)
|
||||||
|
|
|
@ -44,6 +44,17 @@ public:
|
||||||
virtual void finish() = 0;
|
virtual void finish() = 0;
|
||||||
virtual void set_initial_prompt_lines(size_t) = 0;
|
virtual void set_initial_prompt_lines(size_t) = 0;
|
||||||
|
|
||||||
|
void redisplay(const SuggestionManager& manager, size_t lines, size_t columns)
|
||||||
|
{
|
||||||
|
if (m_is_showing_suggestions) {
|
||||||
|
cleanup();
|
||||||
|
set_vt_size(lines, columns);
|
||||||
|
display(manager);
|
||||||
|
} else {
|
||||||
|
set_vt_size(lines, columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
virtual void set_vt_size(size_t lines, size_t columns) = 0;
|
virtual void set_vt_size(size_t lines, size_t columns) = 0;
|
||||||
|
|
||||||
size_t origin_row() const { return m_origin_row; }
|
size_t origin_row() const { return m_origin_row; }
|
||||||
|
@ -56,8 +67,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void did_display() { m_is_showing_suggestions = true; }
|
||||||
|
void did_cleanup() { m_is_showing_suggestions = false; }
|
||||||
|
|
||||||
int m_origin_row { 0 };
|
int m_origin_row { 0 };
|
||||||
int m_origin_column { 0 };
|
int m_origin_column { 0 };
|
||||||
|
bool m_is_showing_suggestions { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
class XtermSuggestionDisplay : public SuggestionDisplay {
|
class XtermSuggestionDisplay : public SuggestionDisplay {
|
||||||
|
|
|
@ -35,6 +35,8 @@ namespace Line {
|
||||||
|
|
||||||
void XtermSuggestionDisplay::display(const SuggestionManager& manager)
|
void XtermSuggestionDisplay::display(const SuggestionManager& manager)
|
||||||
{
|
{
|
||||||
|
did_display();
|
||||||
|
|
||||||
size_t longest_suggestion_length = 0;
|
size_t longest_suggestion_length = 0;
|
||||||
size_t longest_suggestion_byte_length = 0;
|
size_t longest_suggestion_byte_length = 0;
|
||||||
|
|
||||||
|
@ -172,6 +174,8 @@ void XtermSuggestionDisplay::display(const SuggestionManager& manager)
|
||||||
|
|
||||||
bool XtermSuggestionDisplay::cleanup()
|
bool XtermSuggestionDisplay::cleanup()
|
||||||
{
|
{
|
||||||
|
did_cleanup();
|
||||||
|
|
||||||
if (m_lines_used_for_last_suggestions) {
|
if (m_lines_used_for_last_suggestions) {
|
||||||
VT::clear_lines(0, m_lines_used_for_last_suggestions);
|
VT::clear_lines(0, m_lines_used_for_last_suggestions);
|
||||||
m_lines_used_for_last_suggestions = 0;
|
m_lines_used_for_last_suggestions = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue