diff options
Diffstat (limited to 'Libraries/LibLine')
-rw-r--r-- | Libraries/LibLine/Editor.cpp | 33 | ||||
-rw-r--r-- | Libraries/LibLine/Editor.h | 11 |
2 files changed, 30 insertions, 14 deletions
diff --git a/Libraries/LibLine/Editor.cpp b/Libraries/LibLine/Editor.cpp index 2fe2900429..697f6f3634 100644 --- a/Libraries/LibLine/Editor.cpp +++ b/Libraries/LibLine/Editor.cpp @@ -292,6 +292,9 @@ auto Editor::get_line(const String& prompt) -> Result<String, Editor::Error> add_child(*m_notifier); m_notifier->on_ready_to_read = [&] { + if (m_was_interrupted) + handle_interrupt_event(); + handle_read_event(); if (m_always_refresh) @@ -342,6 +345,23 @@ void Editor::save_to(JsonObject& object) object.set("used_display_area", move(display_area)); } +void Editor::handle_interrupt_event() +{ + m_was_interrupted = false; + + if (!m_buffer.is_empty()) + printf("^C"); + + m_buffer.clear(); + m_cursor = 0; + + if (on_interrupt_handled) + on_interrupt_handled(); + + m_refresh_needed = true; + refresh_display(); +} + void Editor::handle_read_event() { char keybuf[16]; @@ -360,18 +380,7 @@ void Editor::handle_read_event() return; } - m_was_interrupted = false; - - if (!m_buffer.is_empty()) - printf("^C"); - - m_buffer.clear(); - m_cursor = 0; - - if (on_interrupt_handled) - on_interrupt_handled(); - - m_refresh_needed = true; + handle_interrupt_event(); return; } diff --git a/Libraries/LibLine/Editor.h b/Libraries/LibLine/Editor.h index c3f8db1cb7..3ebb9e1d52 100644 --- a/Libraries/LibLine/Editor.h +++ b/Libraries/LibLine/Editor.h @@ -114,10 +114,16 @@ public: // since we can not do this cleanly ourselves. (signal() limitation: cannot give member functions) void interrupted() { - if (m_is_editing) + if (m_is_editing) { m_was_interrupted = true; + handle_interrupt_event(); + } + } + void resized() + { + m_was_resized = true; + refresh_display(); } - void resized() { m_was_resized = true; } size_t cursor() const { return m_cursor; } const Vector<u32, 1024>& buffer() const { return m_buffer; } @@ -176,6 +182,7 @@ private: Function<bool(Editor&)> callback; }; + void handle_interrupt_event(); void handle_read_event(); Vector<size_t, 2> vt_dsr(); |