keep a target cursor column to move to when moving cursor up or down

This commit is contained in:
Josh Holtrop 2016-09-12 21:38:13 -04:00
parent 7d3b66fe84
commit cde71ac70a
2 changed files with 14 additions and 8 deletions

View File

@ -135,6 +135,7 @@ bool Window::create(std::shared_ptr<Buffer> buffer)
m_start_piece = m_buffer->piece_table->start_piece->next;
m_cursor_row = 0;
m_scroll_offset = 5;
m_target_column = m_cursor->column;
resize();
@ -257,32 +258,36 @@ void Window::handle_key(uint32_t scancode, uint32_t mod)
void Window::cursor_move(int which)
{
bool success = false;
bool moved = false;
int current_row_offset = m_cursor->column / m_columns;
int row_offset = 0;
switch (which)
{
case CURSOR_LEFT:
success = m_cursor->go_left(1);
moved = m_cursor->go_left(1);
m_target_column = m_cursor->column;
break;
case CURSOR_RIGHT:
success = m_cursor->go_right(1);
moved = m_cursor->go_right(1);
m_target_column = m_cursor->column;
break;
case CURSOR_UP:
success = m_cursor->go_up(1, m_cursor->column);
moved = m_cursor->go_up(1, m_target_column);
break;
case CURSOR_DOWN:
success = m_cursor->go_down(1, m_cursor->column);
moved = m_cursor->go_down(1, m_target_column);
break;
case CURSOR_SOL:
success = m_cursor->go_start_of_line();
moved = m_cursor->go_start_of_line();
m_target_column = 0u;
break;
case CURSOR_EOL:
success = m_cursor->go_end_of_line();
moved = m_cursor->go_end_of_line();
m_target_column = 0x7FFFFFFFu;
break;
}
if (success)
if (moved)
{
switch (which)
{

View File

@ -52,6 +52,7 @@ protected:
int m_rows;
int m_cursor_row;
int m_scroll_offset;
uint32_t m_target_column;
std::shared_ptr<Buffer> m_buffer;