Jline держать подсказку внизу - PullRequest
2 голосов
/ 26 января 2012

Я использую jline, у меня есть аккуратный ConsoleReader, и все прекрасно работает.Однако, если вы что-то набираете в приглашении, а на стандартный вывод выводится вывод (из другого потока), вывод разбивает введенное вами слово / команду.

Как сохранить приглашение jlineв нижней части терминала?

Я использую jline 1, но я открыт для использования jline 2, если он достаточно стабилен.

1 Ответ

5 голосов
/ 10 декабря 2014

Наконец-то понял это ... вот что ты делаешь. Сначала определите эти функции:

private ConsoleReader console = ...;
private CursorBuffer stashed;

private void stashLine() {
    this.stashed = this.console.getCursorBuffer().copy();
    try {
        this.console.getOutput().write("\u001b[1G\u001b[K");
        this.console.flush();
    } catch (IOException e) {
        // ignore
    }
}

private void unstashLine() {
    try {
        this.console.resetPromptLine(this.console.getPrompt(),
          this.stashed.toString(), this.stashed.cursor);
    } catch (IOException e) {
        // ignore
    }
}

Затем, когда вы хотите вывести новые данные, сначала вызовите stashLine(), чтобы сохранить текущий ввод с консоли, затем выведите все новые строки вывода, затем вызовите unstashLine(), чтобы восстановить их.

...