summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2019-05-13 17:34:04 +1000
committerMaxime Coste <mawww@kakoune.org>2019-05-13 17:34:45 +1000
commit4916471029dfa9853473679823bf557bad2c4a52 (patch)
tree4bd9e627ceb2d61d343c8dddbf332127f3e741b7 /src
parent91386a535ccecc1d5d9b0fc27223f8d9006750e3 (diff)
Add completion support to load-module
Diffstat (limited to 'src')
-rw-r--r--src/command_manager.cc7
-rw-r--r--src/command_manager.hh2
-rw-r--r--src/commands.cc5
3 files changed, 13 insertions, 1 deletions
diff --git a/src/command_manager.cc b/src/command_manager.cc
index 1fdfa34d..e4d52d76 100644
--- a/src/command_manager.cc
+++ b/src/command_manager.cc
@@ -624,6 +624,13 @@ Completions CommandManager::complete_command_name(const Context& context, String
return {0, query.length(), Kakoune::complete(query, query.length(), concatenated(commands, aliases))};
}
+Completions CommandManager::complete_module_name(StringView query) const
+{
+ return {0, query.length(),
+ Kakoune::complete(query, query.length(), m_modules | filter([](auto&& item) { return not item.value.loaded; })
+ | transform(&ModuleMap::Item::key))};
+}
+
Completions CommandManager::complete(const Context& context,
CompletionFlags flags,
StringView command_line,
diff --git a/src/command_manager.hh b/src/command_manager.hh
index 329c24f2..774b8b2c 100644
--- a/src/command_manager.hh
+++ b/src/command_manager.hh
@@ -129,6 +129,8 @@ public:
void load_module(StringView module_name, Context& context);
+ Completions complete_module_name(StringView query) const;
+
private:
void execute_single_command(CommandParameters params,
Context& context,
diff --git a/src/commands.cc b/src/commands.cc
index b1fe3580..e368dca8 100644
--- a/src/commands.cc
+++ b/src/commands.cc
@@ -2448,7 +2448,10 @@ const CommandDesc require_module_cmd = {
ParameterDesc{ {}, ParameterDesc::Flags::None, 1, 1 },
CommandFlags::None,
CommandHelper{},
- CommandCompleter{},
+ make_completer(
+ [](const Context&, CompletionFlags, const String& prefix, ByteCount cursor_pos) {
+ return CommandManager::instance().complete_module_name(prefix.substr(0, cursor_pos));
+ }),
[](const ParametersParser& parser, Context& context, const ShellContext&)
{
CommandManager::instance().load_module(parser[0], context);