mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 16:37:35 +00:00
parent
5204c9062c
commit
3a231c00aa
3 changed files with 13 additions and 1 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue