diff --git a/console/src/main/java/org/jline/console/CommandRegistry.java b/console/src/main/java/org/jline/console/CommandRegistry.java index 3b1a544e4..439139ff2 100644 --- a/console/src/main/java/org/jline/console/CommandRegistry.java +++ b/console/src/main/java/org/jline/console/CommandRegistry.java @@ -12,6 +12,7 @@ import java.io.PrintStream; import java.util.*; +import org.jline.reader.Candidate; import org.jline.reader.impl.completer.SystemCompleter; import org.jline.terminal.Terminal; @@ -42,10 +43,22 @@ static SystemCompleter aggregateCompleters(CommandRegistry... commandRegistries) */ static SystemCompleter compileCompleters(CommandRegistry... commandRegistries) { SystemCompleter out = aggregateCompleters(commandRegistries); - out.compile(); + out.compile(s -> createCandidate(commandRegistries, s)); return out; } + static Candidate createCandidate(CommandRegistry[] commandRegistries, String command) { + String group = null, desc = null; + for (CommandRegistry registry : commandRegistries) { + if (registry.hasCommand(command)) { + group = registry.name(); + desc = registry.commandInfo(command).stream().findFirst().orElse(null); + break; + } + } + return new Candidate(command, command, group, desc, null, null, true); + } + /** * Returns the name of this registry. * @return the name of the registry diff --git a/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java b/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java index 3e8fff408..93d3d45b7 100644 --- a/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java +++ b/console/src/main/java/org/jline/console/impl/SystemRegistryImpl.java @@ -306,7 +306,7 @@ private SystemCompleter _compileCompleters() { } local.add(customSystemCompleter); out.add(local); - out.compile(); + out.compile(s -> CommandRegistry.createCandidate(commandRegistries, s)); return out; } diff --git a/reader/src/main/java/org/jline/reader/impl/completer/SystemCompleter.java b/reader/src/main/java/org/jline/reader/impl/completer/SystemCompleter.java index 99d365bf3..f5ab3657f 100644 --- a/reader/src/main/java/org/jline/reader/impl/completer/SystemCompleter.java +++ b/reader/src/main/java/org/jline/reader/impl/completer/SystemCompleter.java @@ -9,6 +9,8 @@ package org.jline.reader.impl.completer; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; import org.jline.reader.Candidate; import org.jline.reader.Completer; @@ -24,6 +26,7 @@ public class SystemCompleter implements Completer { private Map> completers = new HashMap<>(); private Map aliasCommand = new HashMap<>(); + private Map descriptions = new HashMap<>(); private StringsCompleter commands; private boolean compiled = false; @@ -123,7 +126,7 @@ private Map getAliases() { return aliasCommand; } - public void compile() { + public void compile(Function candidateBuilder) { if (compiled) { return; } @@ -139,7 +142,7 @@ public void compile() { completers = compiledCompleters; Set cmds = new HashSet<>(completers.keySet()); cmds.addAll(aliasCommand.keySet()); - commands = new StringsCompleter(cmds); + commands = new StringsCompleter(cmds.stream().map(candidateBuilder).collect(Collectors.toList())); compiled = true; }