Устройство записи терминала Jline выводит вывод в неправильном формате

У нас возникают проблемы с терминалом библиотеки Jline при попытке использовать его средство записи. Когда мы пытаемся написать строку, используя оператор печати терминала, он добавляет символы вокруг строки.

Пример: При печати: terminal.writer().print("Username:"); Мы получаем строку вывода в виде "�[?1l�>�[?1000l�[?2004lUsername:�[?1h�=�[?2004h]", где мы хотим получить только "Username: " как вывод.

Мы попробовали решение по этой ссылке https://github.com/jline/jline3/issues/181, установив параметр "BRACKETED_PASTE_OFF". Но это не сработало.


person Alok Nath Saha    schedule 06.12.2018    source источник
comment
возможно, было бы полезно увидеть код, по крайней мере, как terminal оживает. коды напоминают escape-коды ANSI, попробуйте установить jansi на false. (например, ...2004... — это команда режима BRACKETED_PASTE)   -  person user85421    schedule 07.12.2018
comment
Так что установка для jansi значения false в построителе терминала не сработала. Однако установка параметра (BRACKETED_PASTE, false) для линейного считывателя избавила от строк 2004 года. Но я все еще получаю еще кое-что, прикрепленное к полю имени пользователя [?1l›[?1000lUsername:[?1h=. Ищите, нужно ли отключить/включить какую-либо другую опцию.   -  person Alok Nath Saha    schedule 07.12.2018


Ответы (1)


Я заработал, мне пришлось использовать printAbove, чтобы удалить строку, добавленную при чтении строки, и установить BRACKETED_PASTE как false, чтобы удалить скобки, добавленные на этапе очистки:

final TerminalBuilder builder = TerminalBuilder.builder(); builder.jansi(false); builder.streams(in, out); terminal = builder.build(); reader = LineReaderBuilder.builder().terminal(terminal).build(); reader.option(BRACKETED_PASTE, false); reader.printAbove(StringToPrint); terminal.writer().print(StringToPrint);

person Alok Nath Saha    schedule 07.12.2018