factor addhl/rmhl/addfilter/rmfilter completion functions
This commit is contained in:
parent
a437e9488b
commit
a48672b3bc
|
@ -747,6 +747,38 @@ void change_working_directory(const CommandParameters& params, Context&)
|
||||||
throw runtime_error("cannot change to directory " + params[0]);
|
throw runtime_error("cannot change to directory " + params[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename GetRootGroup>
|
||||||
|
CommandCompleter group_rm_completer(GetRootGroup get_root_group)
|
||||||
|
{
|
||||||
|
return [=](const Context& context, const CommandParameters& params,
|
||||||
|
size_t token_to_complete, ByteCount pos_in_token) {
|
||||||
|
auto& root_group = get_root_group(context);
|
||||||
|
const String& arg = token_to_complete < params.size() ?
|
||||||
|
params[token_to_complete] : String();
|
||||||
|
if (token_to_complete == 1 and params[0] == "-group")
|
||||||
|
return root_group.complete_group_id(arg, pos_in_token);
|
||||||
|
else if (token_to_complete == 2 and params[0] == "-group")
|
||||||
|
return get_group(root_group, params[1]).complete_id(arg, pos_in_token);
|
||||||
|
return root_group.complete_id(arg, pos_in_token);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename FactoryRegistry, typename GetRootGroup>
|
||||||
|
CommandCompleter group_add_completer(GetRootGroup get_root_group)
|
||||||
|
{
|
||||||
|
return [=](const Context& context, const CommandParameters& params,
|
||||||
|
size_t token_to_complete, ByteCount pos_in_token) {
|
||||||
|
auto& root_group = get_root_group(context);
|
||||||
|
const String& arg = token_to_complete < params.size() ?
|
||||||
|
params[token_to_complete] : String();
|
||||||
|
if (token_to_complete == 1 and params[0] == "-group")
|
||||||
|
return root_group.complete_group_id(arg, pos_in_token);
|
||||||
|
else if (token_to_complete == 0 or (token_to_complete == 2 and params[0] == "-group"))
|
||||||
|
return FactoryRegistry::instance().complete_name(arg, pos_in_token);
|
||||||
|
return CandidateList();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
class RegisterRestorer
|
class RegisterRestorer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -820,6 +852,7 @@ void exec_keys(const KeyList& keys, Context& context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void register_commands()
|
void register_commands()
|
||||||
{
|
{
|
||||||
CommandManager& cm = CommandManager::instance();
|
CommandManager& cm = CommandManager::instance();
|
||||||
|
@ -847,62 +880,12 @@ void register_commands()
|
||||||
cm.register_commands({ "db", "delbuf" }, delete_buffer<false>, buffer_completer);
|
cm.register_commands({ "db", "delbuf" }, delete_buffer<false>, buffer_completer);
|
||||||
cm.register_commands({ "db!", "delbuf!" }, delete_buffer<true>, buffer_completer);
|
cm.register_commands({ "db!", "delbuf!" }, delete_buffer<true>, buffer_completer);
|
||||||
|
|
||||||
cm.register_commands({ "ah", "addhl" }, add_highlighter,
|
auto get_highlighters = [](const Context& c) -> HighlighterGroup& { return c.window().highlighters(); };
|
||||||
[](const Context& context, const CommandParameters& params,
|
auto get_filters = [](const Context& c) -> FilterGroup& { return c.window().filters(); };
|
||||||
size_t token_to_complete, ByteCount pos_in_token)
|
cm.register_commands({ "ah", "addhl" }, add_highlighter, group_add_completer<HighlighterRegistry>(get_highlighters));
|
||||||
{
|
cm.register_commands({ "rh", "rmhl" }, rm_highlighter, group_rm_completer(get_highlighters));
|
||||||
Window& w = context.window();
|
cm.register_commands({ "af", "addfilter" }, add_filter, group_add_completer<FilterRegistry>(get_filters));
|
||||||
const String& arg = token_to_complete < params.size() ?
|
cm.register_commands({ "rf", "rmfilter" }, rm_filter, group_rm_completer(get_filters));
|
||||||
params[token_to_complete] : String();
|
|
||||||
if (token_to_complete == 1 and params[0] == "-group")
|
|
||||||
return w.highlighters().complete_group_id(arg, pos_in_token);
|
|
||||||
else if (token_to_complete == 0 or (token_to_complete == 2 and params[0] == "-group"))
|
|
||||||
return HighlighterRegistry::instance().complete_name(arg, pos_in_token);
|
|
||||||
else
|
|
||||||
return CandidateList();
|
|
||||||
});
|
|
||||||
cm.register_commands({ "rh", "rmhl" }, rm_highlighter,
|
|
||||||
[](const Context& context, const CommandParameters& params,
|
|
||||||
size_t token_to_complete, ByteCount pos_in_token)
|
|
||||||
{
|
|
||||||
Window& w = context.window();
|
|
||||||
const String& arg = token_to_complete < params.size() ?
|
|
||||||
params[token_to_complete] : String();
|
|
||||||
if (token_to_complete == 1 and params[0] == "-group")
|
|
||||||
return w.highlighters().complete_group_id(arg, pos_in_token);
|
|
||||||
else if (token_to_complete == 2 and params[0] == "-group")
|
|
||||||
return get_group(w.highlighters(), params[1]).complete_id(arg, pos_in_token);
|
|
||||||
else
|
|
||||||
return w.highlighters().complete_id(arg, pos_in_token);
|
|
||||||
});
|
|
||||||
cm.register_commands({ "af", "addfilter" }, add_filter,
|
|
||||||
[](const Context& context, const CommandParameters& params,
|
|
||||||
size_t token_to_complete, ByteCount pos_in_token)
|
|
||||||
{
|
|
||||||
Window& w = context.window();
|
|
||||||
const String& arg = token_to_complete < params.size() ?
|
|
||||||
params[token_to_complete] : String();
|
|
||||||
if (token_to_complete == 1 and params[0] == "-group")
|
|
||||||
return w.filters().complete_group_id(arg, pos_in_token);
|
|
||||||
else if (token_to_complete == 0 or (token_to_complete == 2 and params[0] == "-group"))
|
|
||||||
return FilterRegistry::instance().complete_name(arg, pos_in_token);
|
|
||||||
else
|
|
||||||
return CandidateList();
|
|
||||||
});
|
|
||||||
cm.register_commands({ "rf", "rmfilter" }, rm_filter,
|
|
||||||
[](const Context& context, const CommandParameters& params,
|
|
||||||
size_t token_to_complete, ByteCount pos_in_token)
|
|
||||||
{
|
|
||||||
Window& w = context.window();
|
|
||||||
const String& arg = token_to_complete < params.size() ?
|
|
||||||
params[token_to_complete] : String();
|
|
||||||
if (token_to_complete == 1 and params[0] == "-group")
|
|
||||||
return w.filters().complete_group_id(arg, pos_in_token);
|
|
||||||
else if (token_to_complete == 2 and params[0] == "-group")
|
|
||||||
return get_group(w.filters(), params[1]).complete_id(arg, pos_in_token);
|
|
||||||
else
|
|
||||||
return w.filters().complete_id(arg, pos_in_token);
|
|
||||||
});
|
|
||||||
|
|
||||||
cm.register_command("hook", add_hook);
|
cm.register_command("hook", add_hook);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user