diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-11-17 13:55:27 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-11-17 13:55:27 +0000 |
| commit | cb108b248a8458bf2d36869de86084d87fe08492 (patch) | |
| tree | 3b67fb6587b93f76a57d3d258c8dd714f250f16f /src/alias_registry.cc | |
| parent | c6e1d9b3dde71f0350a99aba8794dde885fcb82c (diff) | |
Fix alias completion and overwritting
Diffstat (limited to 'src/alias_registry.cc')
| -rw-r--r-- | src/alias_registry.cc | 20 |
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; +} + } |
