allow home/end/arrow keys to move cursor in command or insert mode
This commit is contained in:
parent
95381faedc
commit
314b39b81a
@ -237,91 +237,114 @@ void Window::handle_keysym(uint32_t keysym)
|
||||
|
||||
void Window::handle_keyval(uint32_t keyval)
|
||||
{
|
||||
if (m_buffer_pane->insert_mode())
|
||||
switch (keyval)
|
||||
{
|
||||
if (keyval == '\033')
|
||||
case SDLK_HOME:
|
||||
m_buffer_pane->cursor_move(CursorMovement::SOL);
|
||||
break;
|
||||
case SDLK_END:
|
||||
m_buffer_pane->cursor_move(CursorMovement::EOL);
|
||||
break;
|
||||
case SDLK_RIGHT:
|
||||
m_buffer_pane->cursor_move(CursorMovement::RIGHT);
|
||||
break;
|
||||
case SDLK_LEFT:
|
||||
m_buffer_pane->cursor_move(CursorMovement::LEFT);
|
||||
break;
|
||||
case SDLK_DOWN:
|
||||
m_buffer_pane->cursor_move(CursorMovement::DOWN);
|
||||
break;
|
||||
case SDLK_UP:
|
||||
m_buffer_pane->cursor_move(CursorMovement::UP);
|
||||
break;
|
||||
default:
|
||||
if (m_buffer_pane->insert_mode())
|
||||
{
|
||||
m_buffer_pane->exit_insert_mode();
|
||||
if (keyval == '\033')
|
||||
{
|
||||
m_buffer_pane->exit_insert_mode();
|
||||
}
|
||||
else if (keyval < 0xFFu)
|
||||
{
|
||||
m_buffer_pane->insert_code_point(keyval);
|
||||
}
|
||||
}
|
||||
else if (keyval < 0xFFu)
|
||||
else
|
||||
{
|
||||
m_buffer_pane->insert_code_point(keyval);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (keyval)
|
||||
{
|
||||
case '0':
|
||||
m_buffer_pane->cursor_move(CursorMovement::SOL);
|
||||
break;
|
||||
case '$':
|
||||
m_buffer_pane->cursor_move(CursorMovement::EOL);
|
||||
break;
|
||||
case 'A':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE);
|
||||
break;
|
||||
case 'G':
|
||||
m_buffer_pane->cursor_move(CursorMovement::LAST_LINE);
|
||||
break;
|
||||
case 'I':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_LINE);
|
||||
break;
|
||||
case 'O':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_BEFORE);
|
||||
break;
|
||||
case 'a':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_CHAR);
|
||||
break;
|
||||
case 'g':
|
||||
m_buffer_pane->cursor_move(CursorMovement::FIRST_LINE);
|
||||
break;
|
||||
case 'h':
|
||||
m_buffer_pane->cursor_move(CursorMovement::LEFT);
|
||||
break;
|
||||
case 'i':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_CHAR);
|
||||
break;
|
||||
case 'j':
|
||||
m_buffer_pane->cursor_move(CursorMovement::DOWN);
|
||||
break;
|
||||
case 'k':
|
||||
m_buffer_pane->cursor_move(CursorMovement::UP);
|
||||
break;
|
||||
case 'l':
|
||||
m_buffer_pane->cursor_move(CursorMovement::RIGHT);
|
||||
break;
|
||||
case 'o':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_AFTER);
|
||||
break;
|
||||
case 'x':
|
||||
m_buffer_pane->kill_character_at_cursor();
|
||||
break;
|
||||
case Keymod::CTRL + 'b':
|
||||
m_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'd':
|
||||
m_buffer_pane->scroll_window_down(ScrollMode::HALF_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'e':
|
||||
m_buffer_pane->scroll_window_down(ScrollMode::ONE_LINE);
|
||||
break;
|
||||
case Keymod::CTRL + 'f':
|
||||
m_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'u':
|
||||
m_buffer_pane->scroll_window_up(ScrollMode::HALF_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'w':
|
||||
m_buffer_pane->write_file();
|
||||
break;
|
||||
case Keymod::CTRL + 'y':
|
||||
m_buffer_pane->scroll_window_up(ScrollMode::ONE_LINE);
|
||||
break;
|
||||
case Keymod::CTRL + 'q':
|
||||
m_exit_requested = true;
|
||||
break;
|
||||
switch (keyval)
|
||||
{
|
||||
case '0':
|
||||
m_buffer_pane->cursor_move(CursorMovement::SOL);
|
||||
break;
|
||||
case '$':
|
||||
m_buffer_pane->cursor_move(CursorMovement::EOL);
|
||||
break;
|
||||
case 'A':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE);
|
||||
break;
|
||||
case 'G':
|
||||
m_buffer_pane->cursor_move(CursorMovement::LAST_LINE);
|
||||
break;
|
||||
case 'I':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_LINE);
|
||||
break;
|
||||
case 'O':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_BEFORE);
|
||||
break;
|
||||
case 'a':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_CHAR);
|
||||
break;
|
||||
case 'g':
|
||||
m_buffer_pane->cursor_move(CursorMovement::FIRST_LINE);
|
||||
break;
|
||||
case 'h':
|
||||
m_buffer_pane->cursor_move(CursorMovement::LEFT);
|
||||
break;
|
||||
case 'i':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_CHAR);
|
||||
break;
|
||||
case 'j':
|
||||
m_buffer_pane->cursor_move(CursorMovement::DOWN);
|
||||
break;
|
||||
case 'k':
|
||||
m_buffer_pane->cursor_move(CursorMovement::UP);
|
||||
break;
|
||||
case 'l':
|
||||
m_buffer_pane->cursor_move(CursorMovement::RIGHT);
|
||||
break;
|
||||
case 'o':
|
||||
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_AFTER);
|
||||
break;
|
||||
case 'x':
|
||||
m_buffer_pane->kill_character_at_cursor();
|
||||
break;
|
||||
case Keymod::CTRL + 'b':
|
||||
m_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'd':
|
||||
m_buffer_pane->scroll_window_down(ScrollMode::HALF_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'e':
|
||||
m_buffer_pane->scroll_window_down(ScrollMode::ONE_LINE);
|
||||
break;
|
||||
case Keymod::CTRL + 'f':
|
||||
m_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'u':
|
||||
m_buffer_pane->scroll_window_up(ScrollMode::HALF_SCREEN);
|
||||
break;
|
||||
case Keymod::CTRL + 'w':
|
||||
m_buffer_pane->write_file();
|
||||
break;
|
||||
case Keymod::CTRL + 'y':
|
||||
m_buffer_pane->scroll_window_up(ScrollMode::ONE_LINE);
|
||||
break;
|
||||
case Keymod::CTRL + 'q':
|
||||
m_exit_requested = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user