allow entering and exiting insert mode

This commit is contained in:
Josh Holtrop 2016-12-24 15:40:53 -05:00
parent e3f156c513
commit 4c412e10d7

View File

@ -177,7 +177,7 @@ void BufferPane::draw()
} }
else 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) if (i == *m_iterator)
{ {
/* TODO: highlight multi-column characters */ /* 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)) 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) void BufferPane::handle_key(uint32_t keyval)
{ {
#if 0 if (m_buffer->insert_mode())
if (m_buffer->piece_table->in_insert_mode())
{ {
if (keyval == '\033') 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) else if (keyval <= 0xFFu)
{ {
m_buffer->piece_table->insert_code_point(keyval); m_buffer->insert_code_point(keyval);
} }
redraw(); m_window->request_redraw();
} }
else else
#endif
{ {
switch (keyval) switch (keyval)
{ {
@ -280,6 +279,10 @@ void BufferPane::handle_key(uint32_t keyval)
case 'h': case 'h':
cursor_move(CursorMovement::LEFT); cursor_move(CursorMovement::LEFT);
break; break;
case 'i':
m_buffer->enter_insert_mode(*m_iterator);
m_window->request_redraw();
break;
case 'j': case 'j':
cursor_move(CursorMovement::DOWN); cursor_move(CursorMovement::DOWN);
break; break;
@ -303,7 +306,7 @@ void BufferPane::cursor_move(CursorMovement which)
moved = m_iterator->go_left_in_line(); moved = m_iterator->go_left_in_line();
break; break;
case CursorMovement::RIGHT: case CursorMovement::RIGHT:
moved = m_iterator->go_right_in_line(false); moved = m_iterator->go_right_in_line(m_buffer->insert_mode());
break; break;
case CursorMovement::UP: case CursorMovement::UP:
moved = m_iterator->go_previous_line(); moved = m_iterator->go_previous_line();
@ -315,7 +318,7 @@ void BufferPane::cursor_move(CursorMovement which)
moved = m_iterator->go_start_of_line(); moved = m_iterator->go_start_of_line();
break; break;
case CursorMovement::EOL: case CursorMovement::EOL:
moved = m_iterator->go_end_of_line(false); moved = m_iterator->go_end_of_line(m_buffer->insert_mode());
break; break;
} }
if (moved) if (moved)