diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2013-12-24 02:06:22 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2013-12-24 02:06:22 +0000 |
| commit | fd17ea00ddbb50118bcca0b3d5c431888e30105b (patch) | |
| tree | 460956366bd0a598d67e8afc1d08255120ce0dca /src/command_manager.cc | |
| parent | 01e1169e2c9ca9d7e3956e593a47e1e2d7e7d30c (diff) | |
CommandManager: use aliases for commands rather than duplicating data
Completion now only proposes full command names
Diffstat (limited to 'src/command_manager.cc')
| -rw-r--r-- | src/command_manager.cc | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc index 4338e11e..3fe0f477 100644 --- a/src/command_manager.cc +++ b/src/command_manager.cc @@ -13,7 +13,7 @@ namespace Kakoune bool CommandManager::command_defined(const String& command_name) const { - return m_commands.find(command_name) != m_commands.end(); + return find_command(command_name) != m_commands.end(); } void CommandManager::register_command(String command_name, @@ -29,8 +29,10 @@ void CommandManager::register_commands(memoryview<String> command_names, CommandFlags flags, CommandCompleter completer) { - for (auto command_name : command_names) - m_commands[command_name] = { command, flags, completer }; + kak_assert(not command_names.empty()); + m_commands[command_names[0]] = { std::move(command), flags, completer }; + for (size_t i = 1; i < command_names.size(); ++i) + m_aliases[command_names[i]] = command_names[0]; } struct parse_error : runtime_error @@ -246,16 +248,24 @@ struct command_not_found : runtime_error : runtime_error(command + " : no such command") {} }; +CommandManager::CommandMap::const_iterator CommandManager::find_command(const String& name) const +{ + auto it = m_aliases.find(name); + const String& cmd_name = it == m_aliases.end() ? name : it->second; + + return m_commands.find(cmd_name); +} + void CommandManager::execute_single_command(CommandParameters params, Context& context) const { if (params.empty()) return; - auto command_it = m_commands.find(params[0]); + memoryview<String> param_view(params.begin()+1, params.end()); + auto command_it = find_command(params[0]); if (command_it == m_commands.end()) throw command_not_found(params[0]); - memoryview<String> param_view(params.begin()+1, params.end()); command_it->second.command(param_view, context); } @@ -350,7 +360,7 @@ Completions CommandManager::complete(const Context& context, CompletionFlags fla const String& command_name = tokens[0].content(); - auto command_it = m_commands.find(command_name); + auto command_it = find_command(command_name); if (command_it == m_commands.end() or not command_it->second.completer) return Completions(); |
