jes/src-c/core/DefaultCommandMap.cc
2018-07-25 20:47:02 -04:00

102 lines
5.2 KiB
C++

#include "DefaultCommandMap.h"
#include "keys.h"
std::shared_ptr<CommandMap> g_DefaultCommandMap;
std::shared_ptr<CommandMap> g_DefaultInsertModeCommandMap;
static void build_command_mode()
{
g_DefaultCommandMap = std::make_shared<CommandMap>();
CommandMap * dcm = &*g_DefaultCommandMap;
auto motion_map = std::make_shared<CommandMap>();
motion_map->add("t", Command::Motion::FORWARD_UP_TO_CHAR, nullptr, true);
motion_map->add("f", Command::Motion::FORWARD_ON_TO_CHAR, nullptr, true);
motion_map->add("T", Command::Motion::BACK_UP_TO_CHAR, nullptr, true);
motion_map->add("F", Command::Motion::BACK_ON_TO_CHAR, nullptr, true);
motion_map->add("0", Command::Motion::START_OF_LINE, nullptr, false);
motion_map->add("$", Command::Motion::END_OF_LINE, nullptr, false);
dcm->add("$", Command::GO_END_OF_LINE, nullptr, false);
dcm->add("0", Command::GO_START_OF_LINE, nullptr, false);
dcm->add({JES_KEY_MODS_CTRL + 'e'}, Command::SCROLL_WINDOW_DOWN_ONE_LINE, nullptr, false);
dcm->add("r", Command::REDO, nullptr, false);
dcm->add("t", Command::GO_FORWARD_UP_TO_CHAR, nullptr, true);
dcm->add("T", Command::GO_BACK_UP_TO_CHAR, nullptr, true);
dcm->add("y", Command::YANK_MOTION, motion_map, false);
dcm->add("yy", Command::YANK_LINE, nullptr, false);
dcm->add({JES_KEY_MODS_CTRL + 'y'}, Command::SCROLL_WINDOW_UP_ONE_LINE, nullptr, false);
dcm->add("u", Command::UNDO, nullptr, false);
dcm->add({JES_KEY_MODS_CTRL + 'u'}, Command::SCROLL_WINDOW_UP_HALF_SCREEN, nullptr, false);
dcm->add("i", Command::ENTER_INSERT_MODE, nullptr, false);
dcm->add("o", Command::ENTER_INSERT_MODE_NEW_LINE_AFTER, nullptr, false);
dcm->add("O", Command::ENTER_INSERT_MODE_NEW_LINE_BEFORE, nullptr, false);
dcm->add("p", Command::PUT, nullptr, false);
dcm->add("P", Command::PUT_BEFORE, nullptr, false);
dcm->add("a", Command::ENTER_INSERT_MODE_AFTER_CHAR, nullptr, false);
dcm->add("A", Command::ENTER_INSERT_MODE_AFTER_LINE, nullptr, false);
dcm->add("s", Command::CHANGE_CHAR, nullptr, false);
dcm->add("d", Command::DELETE_MOTION, motion_map, false);
dcm->add("dd", Command::DELETE_LINE, nullptr, false);
dcm->add({JES_KEY_MODS_CTRL + 'd'}, Command::SCROLL_WINDOW_DOWN_HALF_SCREEN, nullptr, false);
dcm->add("f", Command::GO_FORWARD_ON_TO_CHAR, nullptr, true);
dcm->add("F", Command::GO_BACK_ON_TO_CHAR, nullptr, true);
dcm->add({JES_KEY_MODS_CTRL + 'f'}, Command::SCROLL_WINDOW_DOWN_WHOLE_SCREEN, nullptr, false);
dcm->add("gg", Command::GO_TO_LINE, nullptr, false);
dcm->add("G", Command::GO_TO_LAST_LINE, nullptr, false);
dcm->add("h", Command::GO_LEFT, nullptr, false);
dcm->add("H", Command::GO_TOP_OF_SCREEN, nullptr, false);
dcm->add("j", Command::GO_DOWN, nullptr, false);
dcm->add("k", Command::GO_UP, nullptr, false);
dcm->add("l", Command::GO_RIGHT, nullptr, false);
dcm->add("L", Command::GO_BOTTOM_OF_SCREEN, nullptr, false);
dcm->add(":", Command::ENTER_COMMAND_LINE_PROMPT, nullptr, false);
dcm->add("x", Command::DELETE_CHAR, nullptr, false);
dcm->add("X", Command::DELETE_CHAR_BACK, nullptr, false);
dcm->add("c", Command::CHANGE_MOTION, motion_map, false);
dcm->add("cc", Command::CHANGE_LINE, nullptr, false);
dcm->add({JES_KEY_MODS_CTRL + 'b'}, Command::SCROLL_WINDOW_UP_WHOLE_SCREEN, nullptr, false);
dcm->add("n", Command::NEXT, nullptr, false);
dcm->add("N", Command::PREV, nullptr, false);
dcm->add("M", Command::GO_MIDDLE_OF_SCREEN, nullptr, false);
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);
}
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();
}