in common/src/main/java/org/mvndaemon/mvnd/common/logging/TerminalInputHandler.java [164:199]
private void handlePrompt(Message.Prompt prompt) throws IOException {
if (daemonDispatch == null) {
return;
}
if (prompt.getMessage() != null) {
String msg = formatPromptMessage(prompt);
terminal.writer().print(msg);
}
terminal.flush();
StringBuilder sb = new StringBuilder();
while (true) {
int c = terminal.reader().read();
if (c < 0) {
break;
} else if (c == '\n' || c == '\r') {
terminal.writer().println();
daemonDispatch.accept(prompt.response(sb.toString()));
break;
} else if (c == 127) { // Backspace
if (sb.length() > 0) {
sb.setLength(sb.length() - 1);
terminal.writer().write("\b \b");
terminal.writer().flush();
}
} else {
terminal.writer().print((char) c);
terminal.writer().flush();
sb.append((char) c);
}
}
// After prompt is handled, go back to control key listening only if not dumb
if (!dumb) {
inputRequests.offer(InputRequest.forControlKeys());
}
}