1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-24 16:37:35 +00:00

LibLine: Close the search editor when it's interrupted

Fixes #5233.
This commit is contained in:
AnotherTest 2021-02-07 03:12:17 +03:30 committed by Andreas Kling
parent 5204c9062c
commit 3a231c00aa
3 changed files with 13 additions and 1 deletions

View file

@ -539,7 +539,7 @@ void Editor::interrupted()
m_was_interrupted = true; m_was_interrupted = true;
handle_interrupt_event(); handle_interrupt_event();
if (!m_finish) if (!m_finish || !m_previous_interrupt_was_handled_as_interrupt)
return; return;
m_finish = false; m_finish = false;
@ -681,11 +681,14 @@ void Editor::try_update_once()
void Editor::handle_interrupt_event() void Editor::handle_interrupt_event()
{ {
m_was_interrupted = false; m_was_interrupted = false;
m_previous_interrupt_was_handled_as_interrupt = false;
m_callback_machine.interrupted(*this); m_callback_machine.interrupted(*this);
if (!m_callback_machine.should_process_last_pressed_key()) if (!m_callback_machine.should_process_last_pressed_key())
return; return;
m_previous_interrupt_was_handled_as_interrupt = true;
fprintf(stderr, "^C"); fprintf(stderr, "^C");
fflush(stderr); fflush(stderr);

View file

@ -448,6 +448,7 @@ private:
struct termios m_default_termios { struct termios m_default_termios {
}; };
bool m_was_interrupted { false }; bool m_was_interrupted { false };
bool m_previous_interrupt_was_handled_as_interrupt { true };
bool m_was_resized { false }; bool m_was_resized { false };
// FIXME: This should be something more take_first()-friendly. // FIXME: This should be something more take_first()-friendly.

View file

@ -258,6 +258,14 @@ void Editor::enter_search()
return false; // Do not process this key event return false; // Do not process this key event
}); });
// ^C should cancel the search.
m_search_editor->register_key_input_callback(ctrl('C'), [this](Editor& search_editor) {
search_editor.finish();
m_reset_buffer_on_search_end = true;
search_editor.deferred_invoke([&search_editor](auto&) { search_editor.really_quit_event_loop(); });
return false;
});
// Whenever the search editor gets a backspace, cycle back between history entries // Whenever the search editor gets a backspace, cycle back between history entries
// unless we're at the zeroth entry, in which case, allow the deletion. // unless we're at the zeroth entry, in which case, allow the deletion.
m_search_editor->register_key_input_callback(m_termios.c_cc[VERASE], [this](Editor& search_editor) { m_search_editor->register_key_input_callback(m_termios.c_cc[VERASE], [this](Editor& search_editor) {