jline держать подсказку внизу

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

Как сохранить подсказку jline внизу терминала?

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


person Alec Gorge    schedule 25.01.2012    source источник
comment
Библиотека предположительно предназначена для обработки консольного ввода; Я не понимаю, как он может обрабатывать вывод консоли. Проблема в том, что события консольного ввода-вывода являются асинхронными (в вашем случае). Возможно, вам нужно сохранить вывод консоли во временном буфере при выполнении ввода и отобразить вывод из буфера после выполнения ввода.   -  person ee.    schedule 26.01.2012
comment
Возможно, вам нужно поискать библиотеку Curses для Java sourceforge.net/projects/javacurses, sourceforge.net/projects/enigma-shell или javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html который позволяет вам перемещать курсор ввода/вывода консоли   -  person ee.    schedule 26.01.2012


Ответы (1)


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

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(), чтобы восстановить его.

person Archie    schedule 09.12.2014
comment
Вы, сэр, заслуживаете медали. - person Joa Ebert; 17.12.2014