diff --git a/src/gui/BufferPane.cc b/src/gui/BufferPane.cc index 847f684..c36df5a 100644 --- a/src/gui/BufferPane.cc +++ b/src/gui/BufferPane.cc @@ -177,7 +177,7 @@ void BufferPane::draw() } else { - draw_cursor(col_x(0), row_y(0), false); + draw_cursor(col_x(0), row_y(0), m_buffer->insert_mode()); } } @@ -194,7 +194,7 @@ int BufferPane::draw_buffer_line(int screen_row, const Buffer::Iterator & start_ if (i == *m_iterator) { /* TODO: highlight multi-column characters */ - draw_cursor(x, y, false); + draw_cursor(x, y, m_buffer->insert_mode()); } if ((code_point == '\n') || (code_point == 0xFFFFFFFFu)) { @@ -253,21 +253,20 @@ void BufferPane::draw_cursor(int x, int y, bool insert_mode) void BufferPane::handle_key(uint32_t keyval) { -#if 0 - if (m_buffer->piece_table->in_insert_mode()) + if (m_buffer->insert_mode()) { if (keyval == '\033') { - m_buffer->piece_table->end_insert(); + m_buffer->exit_insert_mode(); + /* TODO: move cursor to last character in row if it was on EOL */ } else if (keyval <= 0xFFu) { - m_buffer->piece_table->insert_code_point(keyval); + m_buffer->insert_code_point(keyval); } - redraw(); + m_window->request_redraw(); } else -#endif { switch (keyval) { @@ -280,6 +279,10 @@ void BufferPane::handle_key(uint32_t keyval) case 'h': cursor_move(CursorMovement::LEFT); break; + case 'i': + m_buffer->enter_insert_mode(*m_iterator); + m_window->request_redraw(); + break; case 'j': cursor_move(CursorMovement::DOWN); break; @@ -303,7 +306,7 @@ void BufferPane::cursor_move(CursorMovement which) moved = m_iterator->go_left_in_line(); break; case CursorMovement::RIGHT: - moved = m_iterator->go_right_in_line(false); + moved = m_iterator->go_right_in_line(m_buffer->insert_mode()); break; case CursorMovement::UP: moved = m_iterator->go_previous_line(); @@ -315,7 +318,7 @@ void BufferPane::cursor_move(CursorMovement which) moved = m_iterator->go_start_of_line(); break; case CursorMovement::EOL: - moved = m_iterator->go_end_of_line(false); + moved = m_iterator->go_end_of_line(m_buffer->insert_mode()); break; } if (moved)