summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-09-17 21:01:11 +0200
committerMaxime Coste <frrrwww@gmail.com>2012-09-17 21:01:11 +0200
commita92a6dc7f371c630a730ef4959333fbf8899779b (patch)
treec4552a9081056e6598150b38b495c807b8d728e4 /src
parent4d369d6290c0ee18cb3fdf17a5bdb2a9580478d3 (diff)
ColorRegistry: permit overriding an alias
Diffstat (limited to 'src')
-rw-r--r--src/color_registry.cc5
-rw-r--r--src/color_registry.hh3
-rw-r--r--src/commands.cc15
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<ColorRegistry>
{
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<String, ColorPair> 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);
}
}