diff --git a/src/gui/Window.cc b/src/gui/Window.cc index d2516cd..6f8d0b5 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -135,6 +135,7 @@ bool Window::create(std::shared_ptr 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) { diff --git a/src/gui/Window.h b/src/gui/Window.h index c502e0f..2571b86 100644 --- a/src/gui/Window.h +++ b/src/gui/Window.h @@ -52,6 +52,7 @@ protected: int m_rows; int m_cursor_row; int m_scroll_offset; + uint32_t m_target_column; std::shared_ptr m_buffer;