Add an insert-mode default command map
This commit is contained in:
parent
0d9d160464
commit
7aa3c3b17f
@ -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();
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user