Add an insert-mode default command map

This commit is contained in:
Josh Holtrop 2018-01-04 15:33:58 -05:00
parent 0d9d160464
commit 7aa3c3b17f
4 changed files with 50 additions and 32 deletions

View File

@ -2,8 +2,9 @@
#include "keys.h" #include "keys.h"
std::shared_ptr<CommandMap> g_DefaultCommandMap; std::shared_ptr<CommandMap> g_DefaultCommandMap;
std::shared_ptr<CommandMap> g_DefaultInsertModeCommandMap;
void DefaultCommandMap::build() static void build_command_mode()
{ {
g_DefaultCommandMap = std::make_shared<CommandMap>(); g_DefaultCommandMap = std::make_shared<CommandMap>();
CommandMap * dcm = &*g_DefaultCommandMap; CommandMap * dcm = &*g_DefaultCommandMap;
@ -71,3 +72,27 @@ void DefaultCommandMap::build()
dcm->add({JES_KEY_DOWN}, Command::GO_DOWN, nullptr, false); dcm->add({JES_KEY_DOWN}, Command::GO_DOWN, nullptr, false);
dcm->add({JES_KEY_RIGHT}, Command::GO_RIGHT, nullptr, false); dcm->add({JES_KEY_RIGHT}, Command::GO_RIGHT, nullptr, false);
} }
static void build_insert_mode()
{
g_DefaultInsertModeCommandMap = std::make_shared<CommandMap>();
CommandMap * dcm = &*g_DefaultInsertModeCommandMap;
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_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_DOWN}, Command::SCROLL_WINDOW_DOWN_WHOLE_SCREEN, nullptr, false);
dcm->add({JES_KEY_UP}, Command::GO_UP, nullptr, false);
dcm->add({JES_KEY_LEFT}, Command::GO_LEFT, nullptr, false);
dcm->add({JES_KEY_DOWN}, Command::GO_DOWN, nullptr, false);
dcm->add({JES_KEY_RIGHT}, Command::GO_RIGHT, nullptr, false);
}
void DefaultCommandMap::build()
{
build_command_mode();
build_insert_mode();
}

View File

@ -4,6 +4,7 @@
#include "CommandMap.h" #include "CommandMap.h"
extern std::shared_ptr<CommandMap> g_DefaultCommandMap; extern std::shared_ptr<CommandMap> g_DefaultCommandMap;
extern std::shared_ptr<CommandMap> g_DefaultInsertModeCommandMap;
class DefaultCommandMap class DefaultCommandMap
{ {
@ -14,6 +15,11 @@ public:
{ {
return g_DefaultCommandMap; return g_DefaultCommandMap;
} }
static std::shared_ptr<CommandMap> get_insert_mode()
{
return g_DefaultInsertModeCommandMap;
}
}; };
#endif #endif

View File

@ -246,40 +246,14 @@ void Window::handle_keypress(uint32_t keyval)
change_focus(m_buffer_pane); change_focus(m_buffer_pane);
handle_command(command); handle_command(command);
} }
else if (ctrl_keyval <= 0xFFu) else if (check_insert_mode_command(ctrl_keyval))
{
/* Command was handled, don't do anything else. */
}
else if ((ctrl_keyval & JES_KEY_MODS_CTRL) == 0u)
{ {
m_focused_buffer_pane->insert_code_point(ctrl_keyval); m_focused_buffer_pane->insert_code_point(ctrl_keyval);
} }
else
{
switch (ctrl_keyval)
{
case JES_KEY_HOME:
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::SOL, 0u);
break;
case JES_KEY_END:
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::EOL, 0u);
break;
case JES_KEY_RIGHT:
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::RIGHT, 0u);
break;
case JES_KEY_LEFT:
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::LEFT, 0u);
break;
case JES_KEY_DOWN:
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::DOWN, 0u);
break;
case JES_KEY_UP:
m_focused_buffer_pane->cursor_move(BufferPane::CursorMovement::UP, 0u);
break;
case JES_KEY_PAGE_UP:
m_focused_buffer_pane->scroll_window_up(ScrollMode::WHOLE_SCREEN);
break;
case JES_KEY_PAGE_DOWN:
m_focused_buffer_pane->scroll_window_down(ScrollMode::WHOLE_SCREEN);
break;
}
}
} }
else else
{ {
@ -314,6 +288,18 @@ void Window::evaluate_command_input()
} }
} }
bool Window::check_insert_mode_command(uint32_t insert_mode_command)
{
auto cm = DefaultCommandMap::get_insert_mode();
Command command;
if (cm->lookup_command(&insert_mode_command, 1u, command) == CommandMap::COMMAND_COMPLETE)
{
execute_command(command);
return true;
}
return false;
}
void Window::execute_command(const Command & command) void Window::execute_command(const Command & command)
{ {
switch (command.main.id) switch (command.main.id)

View File

@ -50,6 +50,7 @@ protected:
void set_window_icon(); void set_window_icon();
void handle_command(const EncodedString & command); void handle_command(const EncodedString & command);
void evaluate_command_input(); void evaluate_command_input();
bool check_insert_mode_command(uint32_t insert_mode_command);
void execute_command(const Command & command); void execute_command(const Command & command);
void draw_command_input(); void draw_command_input();