Add an insert-mode default command map
This commit is contained in:
parent
0d9d160464
commit
7aa3c3b17f
@ -2,8 +2,9 @@
|
||||
#include "keys.h"
|
||||
|
||||
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>();
|
||||
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_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();
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "CommandMap.h"
|
||||
|
||||
extern std::shared_ptr<CommandMap> g_DefaultCommandMap;
|
||||
extern std::shared_ptr<CommandMap> g_DefaultInsertModeCommandMap;
|
||||
|
||||
class DefaultCommandMap
|
||||
{
|
||||
@ -14,6 +15,11 @@ public:
|
||||
{
|
||||
return g_DefaultCommandMap;
|
||||
}
|
||||
|
||||
static std::shared_ptr<CommandMap> get_insert_mode()
|
||||
{
|
||||
return g_DefaultInsertModeCommandMap;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -246,40 +246,14 @@ void Window::handle_keypress(uint32_t keyval)
|
||||
change_focus(m_buffer_pane);
|
||||
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);
|
||||
}
|
||||
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
|
||||
{
|
||||
@ -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)
|
||||
{
|
||||
switch (command.main.id)
|
||||
|
@ -50,6 +50,7 @@ protected:
|
||||
void set_window_icon();
|
||||
void handle_command(const EncodedString & command);
|
||||
void evaluate_command_input();
|
||||
bool check_insert_mode_command(uint32_t insert_mode_command);
|
||||
void execute_command(const Command & command);
|
||||
void draw_command_input();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user