Add basic support for colalias completion

This commit is contained in:
Maxime Coste 2014-03-29 13:18:46 +00:00
parent 7dc5588adc
commit 2a7335edef
3 changed files with 24 additions and 1 deletions

View File

@ -36,6 +36,19 @@ void ColorRegistry::register_alias(const String& name, const String& colordesc,
it->second : parse_color_pair(colordesc); it->second : parse_color_pair(colordesc);
} }
CandidateList ColorRegistry::complete_alias_name(const String& prefix,
ByteCount cursor_pos) const
{
CandidateList res;
String real_prefix = prefix.substr(0, cursor_pos);
for (auto& alias : m_aliases)
{
if (prefix_match(alias.first, real_prefix))
res.push_back(alias.first);
}
return res;
}
ColorRegistry::ColorRegistry() ColorRegistry::ColorRegistry()
: m_aliases{ : m_aliases{
{ "PrimarySelection", { Colors::Cyan, Colors::Blue } }, { "PrimarySelection", { Colors::Cyan, Colors::Blue } },

View File

@ -3,6 +3,7 @@
#include "color.hh" #include "color.hh"
#include "utils.hh" #include "utils.hh"
#include "completion.hh"
#include <unordered_map> #include <unordered_map>
@ -18,6 +19,8 @@ public:
void register_alias(const String& name, const String& colordesc, void register_alias(const String& name, const String& colordesc,
bool override = false); bool override = false);
CandidateList complete_alias_name(const String& prefix,
ByteCount cursor_pos) const;
private: private:
std::unordered_map<String, ColorPair> m_aliases; std::unordered_map<String, ColorPair> m_aliases;
}; };

View File

@ -1113,13 +1113,20 @@ const CommandDesc try_catch_cmd = {
} }
}; };
static Completions complete_colalias(const Context&, CompletionFlags flags,
const String& prefix, ByteCount cursor_pos)
{
return {0_byte, prefix.length(),
ColorRegistry::instance().complete_alias_name(prefix, cursor_pos)};
}
const CommandDesc define_color_alias_cmd = { const CommandDesc define_color_alias_cmd = {
"colalias", "colalias",
"ca", "ca",
"colalias <name> <color>: set <name> to refer to color <color> (which can be an alias itself)", "colalias <name> <color>: set <name> to refer to color <color> (which can be an alias itself)",
ParameterDesc{ SwitchMap{}, ParameterDesc::Flags::None, 2, 2 }, ParameterDesc{ SwitchMap{}, ParameterDesc::Flags::None, 2, 2 },
CommandFlags::None, CommandFlags::None,
CommandCompleter{}, PerArgumentCommandCompleter({ complete_colalias, complete_colalias }),
[](const ParametersParser& parser, Context& context) [](const ParametersParser& parser, Context& context)
{ {
ColorRegistry::instance().register_alias(parser[0], parser[1], true); ColorRegistry::instance().register_alias(parser[0], parser[1], true);