allow home/end/arrow keys to move cursor in command or insert mode

This commit is contained in:
Josh Holtrop 2017-01-05 21:05:46 -05:00
parent 95381faedc
commit 314b39b81a

View File

@ -237,91 +237,114 @@ void Window::handle_keysym(uint32_t keysym)
void Window::handle_keyval(uint32_t keyval) 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); switch (keyval)
} {
} case '0':
else m_buffer_pane->cursor_move(CursorMovement::SOL);
{ break;
switch (keyval) case '$':
{ m_buffer_pane->cursor_move(CursorMovement::EOL);
case '0': break;
m_buffer_pane->cursor_move(CursorMovement::SOL); case 'A':
break; m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE);
case '$': break;
m_buffer_pane->cursor_move(CursorMovement::EOL); case 'G':
break; m_buffer_pane->cursor_move(CursorMovement::LAST_LINE);
case 'A': break;
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE); case 'I':
break; m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_LINE);
case 'G': break;
m_buffer_pane->cursor_move(CursorMovement::LAST_LINE); case 'O':
break; m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_BEFORE);
case 'I': break;
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_LINE); case 'a':
break; m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_CHAR);
case 'O': break;
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_BEFORE); case 'g':
break; m_buffer_pane->cursor_move(CursorMovement::FIRST_LINE);
case 'a': break;
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_CHAR); case 'h':
break; m_buffer_pane->cursor_move(CursorMovement::LEFT);
case 'g': break;
m_buffer_pane->cursor_move(CursorMovement::FIRST_LINE); case 'i':
break; m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_CHAR);
case 'h': break;
m_buffer_pane->cursor_move(CursorMovement::LEFT); case 'j':
break; m_buffer_pane->cursor_move(CursorMovement::DOWN);
case 'i': break;
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::START_OF_CHAR); case 'k':
break; m_buffer_pane->cursor_move(CursorMovement::UP);
case 'j': break;
m_buffer_pane->cursor_move(CursorMovement::DOWN); case 'l':
break; m_buffer_pane->cursor_move(CursorMovement::RIGHT);
case 'k': break;
m_buffer_pane->cursor_move(CursorMovement::UP); case 'o':
break; m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_AFTER);
case 'l': break;
m_buffer_pane->cursor_move(CursorMovement::RIGHT); case 'x':
break; m_buffer_pane->kill_character_at_cursor();
case 'o': break;
m_buffer_pane->enter_insert_mode(EnterInsertModeMode::NEW_LINE_AFTER); case Keymod::CTRL + 'b':
break; m_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN);
case 'x': break;
m_buffer_pane->kill_character_at_cursor(); case Keymod::CTRL + 'd':
break; m_buffer_pane->scroll_window_down(ScrollMode::HALF_SCREEN);
case Keymod::CTRL + 'b': break;
m_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN); case Keymod::CTRL + 'e':
break; m_buffer_pane->scroll_window_down(ScrollMode::ONE_LINE);
case Keymod::CTRL + 'd': break;
m_buffer_pane->scroll_window_down(ScrollMode::HALF_SCREEN); case Keymod::CTRL + 'f':
break; m_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN);
case Keymod::CTRL + 'e': break;
m_buffer_pane->scroll_window_down(ScrollMode::ONE_LINE); case Keymod::CTRL + 'u':
break; m_buffer_pane->scroll_window_up(ScrollMode::HALF_SCREEN);
case Keymod::CTRL + 'f': break;
m_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN); case Keymod::CTRL + 'w':
break; m_buffer_pane->write_file();
case Keymod::CTRL + 'u': break;
m_buffer_pane->scroll_window_up(ScrollMode::HALF_SCREEN); case Keymod::CTRL + 'y':
break; m_buffer_pane->scroll_window_up(ScrollMode::ONE_LINE);
case Keymod::CTRL + 'w': break;
m_buffer_pane->write_file(); case Keymod::CTRL + 'q':
break; m_exit_requested = true;
case Keymod::CTRL + 'y': break;
m_buffer_pane->scroll_window_up(ScrollMode::ONE_LINE); }
break;
case Keymod::CTRL + 'q':
m_exit_requested = true;
break;
} }
break;
} }
} }