add Ctrl+Home and Ctrl+End command-mode mappings
This commit is contained in:
parent
154db8dab3
commit
0d9d160464
@ -131,6 +131,7 @@ bool BufferView::cursor_move(CursorMovement which, uint32_t c, bool allow_eol)
|
|||||||
m_target_screen_column = INT_MAX;
|
m_target_screen_column = INT_MAX;
|
||||||
m_target_virtual_column = INT_MAX;
|
m_target_virtual_column = INT_MAX;
|
||||||
break;
|
break;
|
||||||
|
case CursorMovement::START_OF_FILE:
|
||||||
case CursorMovement::FIRST_LINE:
|
case CursorMovement::FIRST_LINE:
|
||||||
{
|
{
|
||||||
auto it = m_buffer->begin();
|
auto it = m_buffer->begin();
|
||||||
@ -143,6 +144,21 @@ bool BufferView::cursor_move(CursorMovement which, uint32_t c, bool allow_eol)
|
|||||||
m_target_screen_column = 0;
|
m_target_screen_column = 0;
|
||||||
m_target_virtual_column = 0;
|
m_target_virtual_column = 0;
|
||||||
break;
|
break;
|
||||||
|
case CursorMovement::END_OF_FILE:
|
||||||
|
{
|
||||||
|
auto it = m_buffer->end();
|
||||||
|
it.go_back();
|
||||||
|
/* TODO: optimize this */
|
||||||
|
it.go_start_of_line();
|
||||||
|
it.go_end_of_line(allow_eol);
|
||||||
|
if (it != *m_iterator)
|
||||||
|
{
|
||||||
|
*m_iterator = it;
|
||||||
|
moved = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_update_target_column = true;
|
||||||
|
break;
|
||||||
case CursorMovement::LAST_LINE:
|
case CursorMovement::LAST_LINE:
|
||||||
{
|
{
|
||||||
auto it = m_buffer->end();
|
auto it = m_buffer->end();
|
||||||
@ -199,9 +215,11 @@ bool BufferView::cursor_move(CursorMovement which, uint32_t c, bool allow_eol)
|
|||||||
case CursorMovement::BACK_ON_TO_CHAR:
|
case CursorMovement::BACK_ON_TO_CHAR:
|
||||||
determine_new_cursor_screen_row();
|
determine_new_cursor_screen_row();
|
||||||
break;
|
break;
|
||||||
|
case CursorMovement::START_OF_FILE:
|
||||||
case CursorMovement::FIRST_LINE:
|
case CursorMovement::FIRST_LINE:
|
||||||
m_cursor_screen_row = 0;
|
m_cursor_screen_row = 0;
|
||||||
break;
|
break;
|
||||||
|
case CursorMovement::END_OF_FILE:
|
||||||
case CursorMovement::LAST_LINE:
|
case CursorMovement::LAST_LINE:
|
||||||
m_cursor_screen_row = m_height - 1;
|
m_cursor_screen_row = m_height - 1;
|
||||||
break;
|
break;
|
||||||
|
@ -22,6 +22,8 @@ public:
|
|||||||
DOWN,
|
DOWN,
|
||||||
SOL,
|
SOL,
|
||||||
EOL,
|
EOL,
|
||||||
|
START_OF_FILE,
|
||||||
|
END_OF_FILE,
|
||||||
FIRST_LINE,
|
FIRST_LINE,
|
||||||
LAST_LINE,
|
LAST_LINE,
|
||||||
SCREEN_ROW_UP,
|
SCREEN_ROW_UP,
|
||||||
|
@ -32,6 +32,8 @@ public:
|
|||||||
PUT,
|
PUT,
|
||||||
PUT_BEFORE,
|
PUT_BEFORE,
|
||||||
CHANGE_CHAR,
|
CHANGE_CHAR,
|
||||||
|
GO_START_OF_FILE,
|
||||||
|
GO_END_OF_FILE,
|
||||||
GO_TO_LINE,
|
GO_TO_LINE,
|
||||||
GO_TO_LAST_LINE,
|
GO_TO_LAST_LINE,
|
||||||
GO_LEFT,
|
GO_LEFT,
|
||||||
|
@ -60,7 +60,9 @@ void DefaultCommandMap::build()
|
|||||||
dcm->add("N", Command::PREV, nullptr, false);
|
dcm->add("N", Command::PREV, nullptr, false);
|
||||||
|
|
||||||
dcm->add({JES_KEY_HOME}, Command::GO_START_OF_LINE, nullptr, false);
|
dcm->add({JES_KEY_HOME}, Command::GO_START_OF_LINE, nullptr, false);
|
||||||
|
dcm->add({JES_KEY_MODS_CTRL + JES_KEY_HOME}, Command::GO_START_OF_FILE, nullptr, false);
|
||||||
dcm->add({JES_KEY_END}, Command::GO_END_OF_LINE, nullptr, false);
|
dcm->add({JES_KEY_END}, Command::GO_END_OF_LINE, nullptr, false);
|
||||||
|
dcm->add({JES_KEY_MODS_CTRL + JES_KEY_END}, Command::GO_END_OF_FILE, nullptr, false);
|
||||||
dcm->add({JES_KEY_PAGE_UP}, Command::SCROLL_WINDOW_UP_WHOLE_SCREEN, nullptr, false);
|
dcm->add({JES_KEY_PAGE_UP}, Command::SCROLL_WINDOW_UP_WHOLE_SCREEN, nullptr, false);
|
||||||
dcm->add({JES_KEY_PAGE_DOWN}, Command::SCROLL_WINDOW_DOWN_WHOLE_SCREEN, nullptr, false);
|
dcm->add({JES_KEY_PAGE_DOWN}, Command::SCROLL_WINDOW_DOWN_WHOLE_SCREEN, nullptr, false);
|
||||||
|
|
||||||
|
@ -390,6 +390,12 @@ void Window::execute_command(const Command & command)
|
|||||||
break;
|
break;
|
||||||
case Command::CHANGE_CHAR:
|
case Command::CHANGE_CHAR:
|
||||||
break;
|
break;
|
||||||
|
case Command::GO_START_OF_FILE:
|
||||||
|
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::START_OF_FILE, 0u);
|
||||||
|
break;
|
||||||
|
case Command::GO_END_OF_FILE:
|
||||||
|
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::END_OF_FILE, 0u);
|
||||||
|
break;
|
||||||
case Command::GO_TO_LINE:
|
case Command::GO_TO_LINE:
|
||||||
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::FIRST_LINE, 0u);
|
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::FIRST_LINE, 0u);
|
||||||
break;
|
break;
|
||||||
|
@ -410,7 +410,7 @@ TEST(BufferViewTest, moves_view_up_while_jumping_to_start_of_a_wrapped_line)
|
|||||||
EXPECT_EQ(C('2'), **iterator);
|
EXPECT_EQ(C('2'), **iterator);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(BufferViewTest, warps_view_when_jumping_to_beginning_and_end_of_buffer)
|
TEST(BufferViewTest, warps_view_when_jumping_to_first_and_last_line_of_buffer)
|
||||||
{
|
{
|
||||||
auto b = buffer1();
|
auto b = buffer1();
|
||||||
auto iterator = b->add_iterator();
|
auto iterator = b->add_iterator();
|
||||||
@ -432,6 +432,29 @@ TEST(BufferViewTest, warps_view_when_jumping_to_beginning_and_end_of_buffer)
|
|||||||
EXPECT_FALSE(bv.cursor_move(BufferView::CursorMovement::FIRST_LINE, 0u, false));
|
EXPECT_FALSE(bv.cursor_move(BufferView::CursorMovement::FIRST_LINE, 0u, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(BufferViewTest, warps_view_when_jumping_to_beginning_and_end_of_file)
|
||||||
|
{
|
||||||
|
auto b = buffer1();
|
||||||
|
auto iterator = b->add_iterator();
|
||||||
|
BufferView bv(b, iterator, Cwd);
|
||||||
|
bv.resize(4, 4);
|
||||||
|
EXPECT_TRUE(bv.cursor_move(BufferView::CursorMovement::END_OF_FILE, 0u, false));
|
||||||
|
bv.update();
|
||||||
|
EXPECT_EQ(C('2'), **iterator);
|
||||||
|
EXPECT_EQ(12, LineNumber(iterator));
|
||||||
|
EXPECT_EQ(3, bv.cursor_screen_row());
|
||||||
|
EXPECT_EQ(1, bv.cursor_screen_column());
|
||||||
|
EXPECT_EQ(1, bv.cursor_virtual_column());
|
||||||
|
EXPECT_FALSE(bv.cursor_move(BufferView::CursorMovement::END_OF_FILE, 0u, false));
|
||||||
|
EXPECT_TRUE(bv.cursor_move(BufferView::CursorMovement::START_OF_FILE, 0u, false));
|
||||||
|
bv.update();
|
||||||
|
EXPECT_EQ(0, LineNumber(iterator));
|
||||||
|
EXPECT_EQ(0, bv.cursor_screen_row());
|
||||||
|
EXPECT_EQ(0, bv.cursor_screen_column());
|
||||||
|
EXPECT_EQ(0, bv.cursor_virtual_column());
|
||||||
|
EXPECT_FALSE(bv.cursor_move(BufferView::CursorMovement::START_OF_FILE, 0u, false));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(BufferViewTest, sets_target_column_to_eol_when_jumping_to_SOL_and_EOL)
|
TEST(BufferViewTest, sets_target_column_to_eol_when_jumping_to_SOL_and_EOL)
|
||||||
{
|
{
|
||||||
auto b = buffer1();
|
auto b = buffer1();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user