completion support for addgrouphl and rmgrouphl
This commit is contained in:
parent
cffdbcb689
commit
541872cafa
|
@ -282,6 +282,12 @@ void HighlighterGroup::remove_highlighter(const std::string& id)
|
|||
m_highlighters.remove(id);
|
||||
}
|
||||
|
||||
CandidateList HighlighterGroup::complete_highlighterid(const std::string& prefix,
|
||||
size_t cursor_pos)
|
||||
{
|
||||
return m_highlighters.complete_id<str_to_str>(prefix, cursor_pos);
|
||||
}
|
||||
|
||||
HighlighterAndId HighlighterGroup::create(Window& window,
|
||||
const HighlighterParameters& params)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,9 @@ public:
|
|||
void add_highlighter(HighlighterAndId&& highlighter);
|
||||
void remove_highlighter(const std::string& id);
|
||||
|
||||
CandidateList complete_highlighterid(const std::string& prefix,
|
||||
size_t cursor_pos);
|
||||
|
||||
static HighlighterAndId create(Window& window,
|
||||
const HighlighterParameters& params);
|
||||
private:
|
||||
|
|
21
src/main.cc
21
src/main.cc
|
@ -966,14 +966,31 @@ int main(int argc, char* argv[])
|
|||
PerArgumentCommandCompleter {
|
||||
std::bind(&HighlighterRegistry::complete_highlighter, &highlighter_registry, _1, _2)
|
||||
});
|
||||
command_manager.register_command(std::vector<std::string>{ "agh", "addgrouphl" }, add_group_highlighter);
|
||||
command_manager.register_command(std::vector<std::string>{ "agh", "addgrouphl" }, add_group_highlighter,
|
||||
CommandManager::None,
|
||||
PerArgumentCommandCompleter {
|
||||
[&](const std::string& prefix, size_t cursor_pos)
|
||||
{ return main_context.window().complete_highlighter_groupid(prefix, cursor_pos); },
|
||||
std::bind(&HighlighterRegistry::complete_highlighter, &highlighter_registry, _1, _2)
|
||||
});
|
||||
command_manager.register_command(std::vector<std::string>{ "rh", "rmhl" }, rm_highlighter,
|
||||
CommandManager::None,
|
||||
PerArgumentCommandCompleter {
|
||||
[&](const std::string& prefix, size_t cursor_pos)
|
||||
{ return main_context.window().complete_highlighterid(prefix, cursor_pos); }
|
||||
});
|
||||
command_manager.register_command(std::vector<std::string>{ "rgh", "rmgrouphl" }, rm_group_highlighter);
|
||||
command_manager.register_command(std::vector<std::string>{ "rgh", "rmgrouphl" }, rm_group_highlighter,
|
||||
CommandManager::None,
|
||||
[&](const CommandParameters& params, size_t token_to_complete, size_t pos_in_token)
|
||||
{
|
||||
Window& w = main_context.window();
|
||||
const std::string& arg = token_to_complete < params.size() ?
|
||||
params[token_to_complete] : std::string();
|
||||
if (token_to_complete == 0)
|
||||
return w.complete_highlighter_groupid(arg, pos_in_token);
|
||||
else if (token_to_complete == 1)
|
||||
return w.get_highlighter_group(params[0]).complete_highlighterid(arg, pos_in_token);
|
||||
});
|
||||
command_manager.register_command(std::vector<std::string>{ "af", "addfilter" }, add_filter,
|
||||
CommandManager::None,
|
||||
PerArgumentCommandCompleter {
|
||||
|
|
|
@ -424,6 +424,21 @@ CandidateList Window::complete_highlighterid(const std::string& prefix,
|
|||
return m_highlighters.complete_id<str_to_str>(prefix, cursor_pos);
|
||||
}
|
||||
|
||||
CandidateList Window::complete_highlighter_groupid(const std::string& prefix,
|
||||
size_t cursor_pos)
|
||||
{
|
||||
CandidateList all = m_highlighters.complete_id<str_to_str>(prefix, cursor_pos);
|
||||
CandidateList result;
|
||||
for (auto& id : all)
|
||||
{
|
||||
auto group_it = m_highlighters.find(id);
|
||||
if (group_it != m_highlighters.end() and
|
||||
group_it->second.target<HighlighterGroup>())
|
||||
result.push_back(id);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void Window::add_filter(FilterAndId&& filter)
|
||||
{
|
||||
if (m_filters.contains(filter.first))
|
||||
|
|
|
@ -107,7 +107,9 @@ public:
|
|||
HighlighterGroup& get_highlighter_group(const std::string& id);
|
||||
|
||||
CandidateList complete_highlighterid(const std::string& prefix,
|
||||
size_t cursor_pos = std::string::npos);
|
||||
size_t cursor_pos);
|
||||
CandidateList complete_highlighter_groupid(const std::string& prefix,
|
||||
size_t cursor_pos);
|
||||
|
||||
void add_filter(FilterAndId&& filter);
|
||||
void remove_filter(const std::string& id);
|
||||
|
|
Loading…
Reference in New Issue
Block a user