summaryrefslogtreecommitdiff
path: root/src/alias_registry.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-11-17 13:55:27 +0000
committerMaxime Coste <frrrwww@gmail.com>2015-11-17 13:55:27 +0000
commitcb108b248a8458bf2d36869de86084d87fe08492 (patch)
tree3b67fb6587b93f76a57d3d258c8dd714f250f16f /src/alias_registry.cc
parentc6e1d9b3dde71f0350a99aba8794dde885fcb82c (diff)
Fix alias completion and overwritting
Diffstat (limited to 'src/alias_registry.cc')
-rw-r--r--src/alias_registry.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/alias_registry.cc b/src/alias_registry.cc
index bcb6b9fd..6e92c006 100644
--- a/src/alias_registry.cc
+++ b/src/alias_registry.cc
@@ -1,6 +1,7 @@
#include "alias_registry.hh"
#include "command_manager.hh"
+#include "containers.hh"
namespace Kakoune
{
@@ -9,7 +10,11 @@ void AliasRegistry::add_alias(String alias, String command)
{
kak_assert(not alias.empty());
kak_assert(CommandManager::instance().command_defined(command));
- m_aliases.append({std::move(alias), std::move(command) });
+ auto it = m_aliases.find(alias);
+ if (it == m_aliases.end())
+ m_aliases.append({std::move(alias), std::move(command) });
+ else
+ it->value = std::move(command);
}
void AliasRegistry::remove_alias(StringView alias)
@@ -45,4 +50,17 @@ Vector<StringView> AliasRegistry::aliases_for(StringView command) const
return res;
}
+Vector<std::pair<StringView, StringView>> AliasRegistry::flatten_aliases() const
+{
+ Vector<std::pair<StringView, StringView>> res;
+ if (m_parent)
+ res = m_parent->flatten_aliases();
+ for (auto& alias : m_aliases)
+ {
+ if (not contains(transformed(res, [](const std::pair<StringView, StringView>& val) { return val.first; }), alias.key))
+ res.emplace_back(alias.key, alias.value);
+ }
+ return res;
+}
+
}