in grails-cli/src/main/java/org/grails/forge/cli/InteractiveShell.java [61:99]
public void start() {
AnsiConsole.systemInstall();
try {
PicocliJLineCompleter picocliCommands = new PicocliJLineCompleter(commandLine.getCommandSpec());
Terminal terminal = TerminalBuilder.terminal();
LineReader reader = LineReaderBuilder.builder()
.terminal(terminal)
.completer(picocliCommands)
.parser(new DefaultParser())
.variable(LineReader.LIST_MAX, 50) // max tab completion candidates
.build();
String ansiPrompt = AUTO.string(prompt);
String rightPrompt = null;
// start the shell and process input until the user quits with Ctl-D
String line;
while (true) {
try {
line = reader.readLine(ansiPrompt, rightPrompt, (MaskingCallback) null, null);
if (line.matches("^\\s*#.*")) {
continue;
}
if (line.equals("exit")) {
return;
}
ParsedLine pl = reader.getParser().parse(line, 0);
String[] arguments = pl.words().toArray(new String[0]);
executor.accept(arguments);
} catch (UserInterruptException | EndOfFileException e) {
return;
}
}
} catch (Throwable t) {
onError.apply(t, commandLine);
} finally {
AnsiConsole.systemUninstall();
}
}