From bb3596b31ebb565a73a5067fd789e6bdbea8a02c Mon Sep 17 00:00:00 2001 From: Minecrell Date: Tue, 1 Dec 2015 15:29:59 +0100 Subject: [PATCH] Improve the console command completer - Fix space after command getting removed when completing a subcommand together with the command prefix - Add support for completing without input (shows command list) - Sort command completion results - Fix console spamming command prefixes after closing the input stream --- .../server/console/ConsoleCommandCompleter.java | 13 +++++++------ .../server/console/TerminalHandler.java | 15 ++++++++------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minecraftforge/server/console/ConsoleCommandCompleter.java b/src/main/java/net/minecraftforge/server/console/ConsoleCommandCompleter.java index af0216edb5..fd73fbc3cb 100644 --- a/src/main/java/net/minecraftforge/server/console/ConsoleCommandCompleter.java +++ b/src/main/java/net/minecraftforge/server/console/ConsoleCommandCompleter.java @@ -2,6 +2,7 @@ package net.minecraftforge.server.console; import static com.google.common.base.Preconditions.checkNotNull; +import java.util.Collections; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -28,14 +29,9 @@ public final class ConsoleCommandCompleter implements Completer public int complete(String buffer, int cursor, List candidates) { int len = buffer.length(); - buffer = buffer.trim(); - if (buffer.isEmpty()) - { - return cursor; - } boolean prefix; - if (buffer.charAt(0) != '/') + if (buffer.isEmpty() || buffer.charAt(0) != '/') { buffer = '/' + buffer; prefix = false; @@ -59,6 +55,7 @@ public final class ConsoleCommandCompleter implements Completer try { List completions = tabComplete.get(); + Collections.sort(completions); if (prefix) { candidates.addAll(completions); @@ -76,6 +73,10 @@ public final class ConsoleCommandCompleter implements Completer { return cursor - len; } + else if (prefix) + { + return cursor - len + pos + 1; + } else { return cursor - len + pos; diff --git a/src/main/java/net/minecraftforge/server/console/TerminalHandler.java b/src/main/java/net/minecraftforge/server/console/TerminalHandler.java index 3c9f6af28b..142b32bc73 100644 --- a/src/main/java/net/minecraftforge/server/console/TerminalHandler.java +++ b/src/main/java/net/minecraftforge/server/console/TerminalHandler.java @@ -34,14 +34,15 @@ public final class TerminalHandler try { line = reader.readLine("> "); - - if (line != null) + if (line == null) { - line = line.trim(); - if (!line.isEmpty()) - { - server.addPendingCommand(line, server); - } + break; + } + + line = line.trim(); + if (!line.isEmpty()) + { + server.addPendingCommand(line, server); } } catch (IOException e)