Add ':' command to focus command buffer pane

This commit is contained in:
Josh Holtrop 2017-01-18 21:46:34 -05:00
parent 9d150524fb
commit 12c034fb8f
3 changed files with 21 additions and 1 deletions

View File

@ -748,4 +748,5 @@ void BufferPane::set_command_mode()
{ {
m_command_mode = true; m_command_mode = true;
set_show_status_bar(false); set_show_status_bar(false);
enter_insert_mode(Window::EnterInsertModeMode::START_OF_CHAR);
} }

View File

@ -272,9 +272,16 @@ void Window::handle_keyval(uint32_t keyval)
if (m_focused_buffer_pane->insert_mode()) if (m_focused_buffer_pane->insert_mode())
{ {
if (keyval == '\033') if (keyval == '\033')
{
if (m_focused_buffer_pane == m_command_buffer_pane)
{
change_focus(m_buffer_pane);
}
else
{ {
m_focused_buffer_pane->exit_insert_mode(); m_focused_buffer_pane->exit_insert_mode();
} }
}
else if (keyval < 0xFFu) else if (keyval < 0xFFu)
{ {
m_focused_buffer_pane->insert_code_point(keyval); m_focused_buffer_pane->insert_code_point(keyval);
@ -290,6 +297,9 @@ void Window::handle_keyval(uint32_t keyval)
case '$': case '$':
m_focused_buffer_pane->cursor_move(CursorMovement::EOL); m_focused_buffer_pane->cursor_move(CursorMovement::EOL);
break; break;
case ':':
change_focus(m_command_buffer_pane);
break;
case 'A': case 'A':
m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE); m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE);
break; break;
@ -490,3 +500,11 @@ uint32_t Window::get_shifted(uint32_t keysym)
return 0u; return 0u;
} }
void Window::change_focus(std::shared_ptr<BufferPane> buffer_pane)
{
m_focused_buffer_pane->set_focused(false);
m_focused_buffer_pane = buffer_pane;
m_focused_buffer_pane->set_focused(true);
request_redraw();
}

View File

@ -72,6 +72,7 @@ protected:
void handle_keyval(uint32_t keyval); void handle_keyval(uint32_t keyval);
uint32_t get_keyval(SDL_Keycode keysym); uint32_t get_keyval(SDL_Keycode keysym);
uint32_t get_shifted(uint32_t keysym); uint32_t get_shifted(uint32_t keysym);
void change_focus(std::shared_ptr<BufferPane> buffer_pane);
SDL_Window * m_window; SDL_Window * m_window;
bool m_exit_requested; bool m_exit_requested;