Move keymap as an implementation detail of the normal mode keys

Only expose a free function that tries to get the NormalCmd from a
key.
This commit is contained in:
Maxime Coste 2017-10-17 11:29:52 +08:00
parent 209113aa1c
commit ddff35e5ab
3 changed files with 14 additions and 7 deletions

View File

@ -281,19 +281,18 @@ public:
context().client().info_hide();
do_restore_hooks = true;
auto it = keymap.find(key);
if (it != keymap.end() and it->key == key)
if (auto command = get_normal_command(key))
{
auto autoinfo = context().options()["autoinfo"].get<AutoInfo>();
if (autoinfo & AutoInfo::Normal and context().has_client())
context().client().info_show(key_to_str(key), it->value.docstring.str(),
context().client().info_show(key_to_str(key), command->docstring.str(),
{}, InfoStyle::Prompt);
// reset m_params now to be reentrant
NormalParams params = m_params;
m_params = { 0, 0 };
it->value.func(context(), params);
command->func(context(), params);
}
}

View File

@ -1943,7 +1943,7 @@ void force_redraw(Context& context, NormalParams)
}
}
const HashMap<Key, NormalCmd> keymap{
static const HashMap<Key, NormalCmd> keymap{
{ {'h'}, {"move left", move<CharCount, Backward>} },
{ {'j'}, {"move down", move<LineCount, Forward>} },
{ {'k'}, {"move up", move<LineCount, Backward>} },
@ -2131,4 +2131,12 @@ const HashMap<Key, NormalCmd> keymap{
{ {ctrl('l')}, {"force redraw", force_redraw} },
};
Optional<NormalCmd> get_normal_command(Key key)
{
auto it = keymap.find(key);
if (it != keymap.end())
return it->value;
return {};
}
}

View File

@ -1,7 +1,7 @@
#ifndef normal_hh_INCLUDED
#define normal_hh_INCLUDED
#include "hash_map.hh"
#include "optional.hh"
#include "keys.hh"
#include "string.hh"
@ -22,7 +22,7 @@ struct NormalCmd
void (*func)(Context& context, NormalParams params);
};
extern const HashMap<Key, NormalCmd> keymap;
Optional<NormalCmd> get_normal_command(Key key);
}