From a92a6dc7f371c630a730ef4959333fbf8899779b Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Mon, 17 Sep 2012 21:01:11 +0200 Subject: [PATCH] ColorRegistry: permit overriding an alias --- src/color_registry.cc | 5 +++-- src/color_registry.hh | 3 ++- src/commands.cc | 15 ++++++++++----- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/color_registry.cc b/src/color_registry.cc index ed1dcac3..1d1b3235 100644 --- a/src/color_registry.cc +++ b/src/color_registry.cc @@ -35,9 +35,10 @@ const ColorPair& ColorRegistry::operator[](const String& colordesc) m_aliases[colordesc] = colpair; } -void ColorRegistry::register_alias(const String& name, const String& colordesc) +void ColorRegistry::register_alias(const String& name, const String& colordesc, + bool override) { - if (m_aliases.find(name) != m_aliases.end()) + if (not override and m_aliases.find(name) != m_aliases.end()) throw runtime_error("alias '" + name + "' already defined"); if (std::find_if(name.begin(), name.end(), diff --git a/src/color_registry.hh b/src/color_registry.hh index 0b249b71..711ff204 100644 --- a/src/color_registry.hh +++ b/src/color_registry.hh @@ -15,7 +15,8 @@ class ColorRegistry : public Singleton { public: const ColorPair& operator[](const String& colordesc); - void register_alias(const String& name, const String& colordesc); + void register_alias(const String& name, const String& colordesc, + bool override = false); private: std::unordered_map m_aliases; diff --git a/src/commands.cc b/src/commands.cc index fe15593b..9f8e6d58 100644 --- a/src/commands.cc +++ b/src/commands.cc @@ -750,6 +750,15 @@ void try_catch(const CommandParameters& params, Context& context) } } +void define_color_alias(const CommandParameters& params, Context& context) +{ + ParametersParser parser(params, { { "allow-override", false } }); + if (parser.positional_count() != 2) + throw wrong_argument_count(); + ColorRegistry::instance().register_alias( + parser[0], parser[1], parser.has_option("allow-override")); +} + } void register_commands() @@ -863,11 +872,7 @@ void register_commands() { return context.window().option_manager().complete_option_name(prefix, cursor_pos); } })); - cm.register_commands({"ca", "colalias"}, - [](const CommandParameters& params, Context&) { - if (params.size() != 2) throw wrong_argument_count(); - ColorRegistry::instance().register_alias(params[0], params[1]); - }); + cm.register_commands({"ca", "colalias"}, define_color_alias); } }