From 109094c48c9782e85bbd15d1742a3002d7fedb2e Mon Sep 17 00:00:00 2001 From: Eric Bottard Date: Thu, 1 Jun 2017 15:49:42 +0200 Subject: [PATCH] Don't escape/quote command names in completion proposals Fixes #76 --- .../shell2/CompletionProposal.java | 15 +++++++++++++++ .../java/org/springframework/shell2/Shell.java | 1 + .../springframework/shell2/jline/JLineShell.java | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/spring-shell2-core/src/main/java/org/springframework/shell2/CompletionProposal.java b/spring-shell2-core/src/main/java/org/springframework/shell2/CompletionProposal.java index d1ef5c04..141622d1 100644 --- a/spring-shell2-core/src/main/java/org/springframework/shell2/CompletionProposal.java +++ b/spring-shell2-core/src/main/java/org/springframework/shell2/CompletionProposal.java @@ -43,6 +43,12 @@ public class CompletionProposal { */ private String category; + /** + * Whether the proposal should bypass escaping and quoting rules. This is useful for command proposals, which can + * appear as true multi-word Strings. + */ + private boolean dontQuote = false; + public CompletionProposal(String value) { this.value = this.displayText = value; } @@ -83,6 +89,15 @@ public class CompletionProposal { return this; } + public CompletionProposal dontQuote(boolean dontQuote) { + this.dontQuote = dontQuote; + return this; + } + + public boolean dontQuote() { + return dontQuote; + } + @Override public String toString() { return value; diff --git a/spring-shell2-core/src/main/java/org/springframework/shell2/Shell.java b/spring-shell2-core/src/main/java/org/springframework/shell2/Shell.java index a4c24876..05991393 100644 --- a/spring-shell2-core/src/main/java/org/springframework/shell2/Shell.java +++ b/spring-shell2-core/src/main/java/org/springframework/shell2/Shell.java @@ -172,6 +172,7 @@ public class Shell implements CommandRegistry { private CompletionProposal toCompletionProposal(String command, MethodTarget methodTarget) { return new CompletionProposal(command) + .dontQuote(true) .category("Available commands") .description(methodTarget.getHelp()); } diff --git a/spring-shell2-core/src/main/java/org/springframework/shell2/jline/JLineShell.java b/spring-shell2-core/src/main/java/org/springframework/shell2/jline/JLineShell.java index 57a0b499..642cf507 100644 --- a/spring-shell2-core/src/main/java/org/springframework/shell2/jline/JLineShell.java +++ b/spring-shell2-core/src/main/java/org/springframework/shell2/jline/JLineShell.java @@ -154,7 +154,7 @@ public class JLineShell { List proposals = shell.complete(context); proposals.stream() .map(p -> new Candidate( - cpl.emit(p.value()).toString(), + p.dontQuote() ? p.value() : cpl.emit(p.value()).toString(), p.displayText(), p.category(), p.description(),