Fix :map docs and add completion support
This commit is contained in:
parent
8060eef66e
commit
0c1b27cfa7
|
@ -895,10 +895,25 @@ KeymapMode parse_keymap_mode(const String& str)
|
||||||
throw runtime_error("unknown keymap mode '" + str + "'");
|
throw runtime_error("unknown keymap mode '" + str + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CandidateList complete_mode(StringView prefix)
|
||||||
|
{
|
||||||
|
CandidateList res;
|
||||||
|
for (auto mode : { "normal", "insert", "menu", "prompt" })
|
||||||
|
{
|
||||||
|
if (prefix_match(mode, prefix))
|
||||||
|
res.emplace_back(mode);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
const CommandDesc map_key_cmd = {
|
const CommandDesc map_key_cmd = {
|
||||||
"map",
|
"map",
|
||||||
nullptr,
|
nullptr,
|
||||||
"map <mode> <key> <keys>: map <key> to <keys> in given mode.\n"
|
"map <scope> <mode> <key> <keys>: map <key> to <keys> in given mode at given scope.\n"
|
||||||
|
"Valid scopes:\n"
|
||||||
|
" window\n"
|
||||||
|
" buffer\n"
|
||||||
|
" global\n"
|
||||||
"Valid modes:\n"
|
"Valid modes:\n"
|
||||||
" normal\n"
|
" normal\n"
|
||||||
" insert\n"
|
" insert\n"
|
||||||
|
@ -906,7 +921,17 @@ const CommandDesc map_key_cmd = {
|
||||||
" prompt\n",
|
" prompt\n",
|
||||||
ParameterDesc{ SwitchMap{}, ParameterDesc::Flags::None, 4, 4 },
|
ParameterDesc{ SwitchMap{}, ParameterDesc::Flags::None, 4, 4 },
|
||||||
CommandFlags::None,
|
CommandFlags::None,
|
||||||
CommandCompleter{},
|
[](const Context& context, CompletionFlags flags,
|
||||||
|
CommandParameters params, size_t token_to_complete, ByteCount pos_in_token)
|
||||||
|
{
|
||||||
|
if (token_to_complete == 0)
|
||||||
|
return Completions{ 0_byte, params[0].length(),
|
||||||
|
complete_scope(params[0].substr(0_byte, pos_in_token)) };
|
||||||
|
if (token_to_complete == 1)
|
||||||
|
return Completions{ 0_byte, params[0].length(),
|
||||||
|
complete_mode(params[1].substr(0_byte, pos_in_token)) };
|
||||||
|
return Completions{};
|
||||||
|
},
|
||||||
[](const ParametersParser& parser, Context& context)
|
[](const ParametersParser& parser, Context& context)
|
||||||
{
|
{
|
||||||
KeymapManager& keymaps = get_keymap_manager(parser[0], context);
|
KeymapManager& keymaps = get_keymap_manager(parser[0], context);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user