diff --git a/src/gui/Window.cc b/src/gui/Window.cc index e7379d0..5245d24 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -250,46 +250,57 @@ void Window::handle_keysym(uint32_t keysym) void Window::handle_keyval(uint32_t keyval) { - switch (keyval) + if (m_buffer->piece_table->in_insert_mode()) { - case SDLK_ESCAPE: - m_exit_requested = true; - break; - case '0': - cursor_move(CURSOR_SOL); - break; - case '$': - cursor_move(CURSOR_EOL); - break; - case 'h': - cursor_move(CURSOR_LEFT); - break; - case 'j': - cursor_move(CURSOR_DOWN); - break; - case 'k': - cursor_move(CURSOR_UP); - break; - case 'l': - cursor_move(CURSOR_RIGHT); - break; - case 'p': - insertion_test(); - break; - case 'u': - m_buffer->piece_table->undo(); + if (keyval == '\033') + { + m_buffer->piece_table->end_insert(); + } + else if (keyval <= 0xFFu) + { + m_buffer->piece_table->insert_code_point(keyval); + } redraw(); - break; - case 'i': - m_buffer->piece_table->begin_insert(*m_cursor, true); - break; - case 'o': - m_buffer->piece_table->insert_code_point('*'); - redraw(); - break; - case 'a': - m_buffer->piece_table->begin_insert(*m_cursor, false); - break; + } + else + { + switch (keyval) + { + case SDLK_ESCAPE: + m_exit_requested = true; + break; + case '0': + cursor_move(CURSOR_SOL); + break; + case '$': + cursor_move(CURSOR_EOL); + break; + case 'h': + cursor_move(CURSOR_LEFT); + break; + case 'j': + cursor_move(CURSOR_DOWN); + break; + case 'k': + cursor_move(CURSOR_UP); + break; + case 'l': + cursor_move(CURSOR_RIGHT); + break; + case 'p': + insertion_test(); + break; + case 'u': + m_buffer->piece_table->undo(); + redraw(); + break; + case 'i': + m_buffer->piece_table->begin_insert(*m_cursor, true); + break; + case 'a': + m_buffer->piece_table->begin_insert(*m_cursor, false); + break; + } } }