Java: «История» для команд cli, как сделать вывод «редактируемым»? - PullRequest
2 голосов
/ 15 декабря 2010

Я хочу добавить функцию «истории» в мою Java-программу, например, известную из bash и т. Д., Поэтому нажатие клавиш со стрелками должно показать предыдущие команды отправки.вывод по умолчанию, который будет в трех новых строках, если стрелка вверх нажата три раза и не редактируется.Я хочу, чтобы выходные данные программы были записаны в поле ввода, поэтому мне просто нужно нажать Enter, чтобы отправить команду заново.

Возможно ли это?

С уважением

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Посмотрите на JLine , который предоставляет историю команд, завершение табуляции и редактирование строки.

2 голосов
/ 15 декабря 2010

Если вы хотите запустить собственное решение, это поможет вам начать работу.

Вы хотите перейти от использования буферизованного ввода к прямому вводу. Вы можете сделать это, напрямую взаимодействуя с System.in. Вы должны создать поток для обработки этого и заблокировать его при вызове System.in.read() в цикле, читая по одному байту за раз.

Каждый раз, когда читается байт, обновляйте свой собственный буфер текущей читаемой командой. Каждый символ, который набирается, добавляется в буфер. Если символ \b, удалите последний символ в буфере. Когда вы обнаружите \r или \n, выполните команду в буфере и очистите ее.

Если вы получили стрелку вверх или вниз, отправьте число от \b s до System.out, равное длине буфера. Это сотрет локальную копию любой текущей вводимой команды. Затем распечатайте новую команду на System.out и введите ее в буфер, заменив все, что там было. Это позволит пользователю удалить его, добавить к нему или просто нажать клавишу ввода, чтобы отправить его. Это имитирует функциональность bash.

Вы также можете обнаружить символ \t (табуляция) и реализовать функцию завершения табуляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...