Add <a-;> in insert mode to execute a single normal mode command
This commit is contained in:
parent
84d8447a58
commit
3fb783f7f9
|
@ -45,6 +45,11 @@ protected:
|
||||||
|
|
||||||
virtual void on_key(Key key, KeepAlive keep_alive) = 0;
|
virtual void on_key(Key key, KeepAlive keep_alive) = 0;
|
||||||
|
|
||||||
|
void push_mode(InputMode* new_mode)
|
||||||
|
{
|
||||||
|
m_input_handler.push_mode(new_mode);
|
||||||
|
}
|
||||||
|
|
||||||
void pop_mode(KeepAlive& keep_alive)
|
void pop_mode(KeepAlive& keep_alive)
|
||||||
{
|
{
|
||||||
kak_assert(not keep_alive.ptr);
|
kak_assert(not keep_alive.ptr);
|
||||||
|
@ -139,7 +144,7 @@ private:
|
||||||
class Normal : public InputMode
|
class Normal : public InputMode
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Normal(InputHandler& input_handler)
|
Normal(InputHandler& input_handler, bool single_command = false)
|
||||||
: InputMode(input_handler),
|
: InputMode(input_handler),
|
||||||
m_idle_timer{TimePoint::max(),
|
m_idle_timer{TimePoint::max(),
|
||||||
context().flags() & Context::Flags::Transient ?
|
context().flags() & Context::Flags::Transient ?
|
||||||
|
@ -153,7 +158,8 @@ public:
|
||||||
return;
|
return;
|
||||||
context().client().check_if_buffer_needs_reloading();
|
context().client().check_if_buffer_needs_reloading();
|
||||||
timer.set_next_date(Clock::now() + fs_check_timeout);
|
timer.set_next_date(Clock::now() + fs_check_timeout);
|
||||||
})}
|
})},
|
||||||
|
m_single_command(single_command)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void on_enabled() override
|
void on_enabled() override
|
||||||
|
@ -220,6 +226,9 @@ public:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (m_single_command)
|
||||||
|
pop_mode(keep_alive);
|
||||||
|
|
||||||
if (m_hooks_disabled)
|
if (m_hooks_disabled)
|
||||||
do_restore_hooks = true;
|
do_restore_hooks = true;
|
||||||
auto it = std::lower_bound(keymap.begin(), keymap.end(), key,
|
auto it = std::lower_bound(keymap.begin(), keymap.end(), key,
|
||||||
|
@ -264,6 +273,7 @@ private:
|
||||||
Timer m_idle_timer;
|
Timer m_idle_timer;
|
||||||
Timer m_fs_check_timer;
|
Timer m_fs_check_timer;
|
||||||
MouseHandler m_mouse_handler;
|
MouseHandler m_mouse_handler;
|
||||||
|
const bool m_single_command;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<WordType word_type>
|
template<WordType word_type>
|
||||||
|
@ -1037,6 +1047,11 @@ public:
|
||||||
}
|
}
|
||||||
else if (key == ctrl('u'))
|
else if (key == ctrl('u'))
|
||||||
context().buffer().commit_undo_group();
|
context().buffer().commit_undo_group();
|
||||||
|
else if (key == alt(';'))
|
||||||
|
{
|
||||||
|
push_mode(new Normal(context().input_handler(), true));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
context().hooks().run_hook("InsertKey", key_to_str(key), context());
|
context().hooks().run_hook("InsertKey", key_to_str(key), context());
|
||||||
|
|
||||||
|
@ -1239,8 +1254,7 @@ void InputHandler::set_prompt_face(Face prompt_face)
|
||||||
prompt->set_prompt_face(prompt_face);
|
prompt->set_prompt_face(prompt_face);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputHandler::menu(ConstArrayView<String> choices,
|
void InputHandler::menu(ConstArrayView<String> choices, MenuCallback callback)
|
||||||
MenuCallback callback)
|
|
||||||
{
|
{
|
||||||
push_mode(new InputModes::Menu(*this, choices, callback));
|
push_mode(new InputModes::Menu(*this, choices, callback));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user