mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 00:31:14 +00:00
LibLine: Redraw the suggestions when terminal size changes
This commit is contained in:
parent
3cfab83e7e
commit
e1e84fe0fe
Notes:
sideshowbarker
2024-07-18 19:24:10 +09:00
Author: https://github.com/alimpfard Commit: https://github.com/SerenityOS/serenity/commit/e1e84fe0fef Pull-request: https://github.com/SerenityOS/serenity/pull/6483 Issue: https://github.com/SerenityOS/serenity/issues/6471 Issue: https://github.com/SerenityOS/serenity/issues/6472
|
@ -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()
|
||||
{
|
||||
m_finish = false;
|
||||
|
|
|
@ -189,15 +189,7 @@ public:
|
|||
#undef __ENUMERATE_EDITOR_INTERNAL_FUNCTION
|
||||
|
||||
void interrupted();
|
||||
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();
|
||||
}
|
||||
void resized();
|
||||
|
||||
size_t cursor() const { return m_cursor; }
|
||||
void set_cursor(size_t cursor)
|
||||
|
|
|
@ -44,6 +44,17 @@ public:
|
|||
virtual void finish() = 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;
|
||||
|
||||
size_t origin_row() const { return m_origin_row; }
|
||||
|
@ -56,8 +67,12 @@ public:
|
|||
}
|
||||
|
||||
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_column { 0 };
|
||||
bool m_is_showing_suggestions { false };
|
||||
};
|
||||
|
||||
class XtermSuggestionDisplay : public SuggestionDisplay {
|
||||
|
|
|
@ -35,6 +35,8 @@ namespace Line {
|
|||
|
||||
void XtermSuggestionDisplay::display(const SuggestionManager& manager)
|
||||
{
|
||||
did_display();
|
||||
|
||||
size_t longest_suggestion_length = 0;
|
||||
size_t longest_suggestion_byte_length = 0;
|
||||
|
||||
|
@ -172,6 +174,8 @@ void XtermSuggestionDisplay::display(const SuggestionManager& manager)
|
|||
|
||||
bool XtermSuggestionDisplay::cleanup()
|
||||
{
|
||||
did_cleanup();
|
||||
|
||||
if (m_lines_used_for_last_suggestions) {
|
||||
VT::clear_lines(0, m_lines_used_for_last_suggestions);
|
||||
m_lines_used_for_last_suggestions = 0;
|
||||
|
|
Loading…
Reference in a new issue