diff --git a/src/gui/BufferPane.cc b/src/gui/BufferPane.cc index 1aac41c..995e3f7 100644 --- a/src/gui/BufferPane.cc +++ b/src/gui/BufferPane.cc @@ -748,4 +748,5 @@ void BufferPane::set_command_mode() { m_command_mode = true; set_show_status_bar(false); + enter_insert_mode(Window::EnterInsertModeMode::START_OF_CHAR); } diff --git a/src/gui/Window.cc b/src/gui/Window.cc index c9063ea..cf2bee8 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -273,7 +273,14 @@ void Window::handle_keyval(uint32_t keyval) { if (keyval == '\033') { - m_focused_buffer_pane->exit_insert_mode(); + if (m_focused_buffer_pane == m_command_buffer_pane) + { + change_focus(m_buffer_pane); + } + else + { + m_focused_buffer_pane->exit_insert_mode(); + } } else if (keyval < 0xFFu) { @@ -290,6 +297,9 @@ void Window::handle_keyval(uint32_t keyval) case '$': m_focused_buffer_pane->cursor_move(CursorMovement::EOL); break; + case ':': + change_focus(m_command_buffer_pane); + break; case 'A': m_focused_buffer_pane->enter_insert_mode(EnterInsertModeMode::END_OF_LINE); break; @@ -490,3 +500,11 @@ uint32_t Window::get_shifted(uint32_t keysym) return 0u; } + +void Window::change_focus(std::shared_ptr buffer_pane) +{ + m_focused_buffer_pane->set_focused(false); + m_focused_buffer_pane = buffer_pane; + m_focused_buffer_pane->set_focused(true); + request_redraw(); +} diff --git a/src/gui/Window.h b/src/gui/Window.h index f5abe20..1ab5264 100644 --- a/src/gui/Window.h +++ b/src/gui/Window.h @@ -72,6 +72,7 @@ protected: void handle_keyval(uint32_t keyval); uint32_t get_keyval(SDL_Keycode keysym); uint32_t get_shifted(uint32_t keysym); + void change_focus(std::shared_ptr buffer_pane); SDL_Window * m_window; bool m_exit_requested;