Если вы хотите запустить собственное решение, это поможет вам начать работу.
Вы хотите перейти от использования буферизованного ввода к прямому вводу. Вы можете сделать это, напрямую взаимодействуя с System.in
. Вы должны создать поток для обработки этого и заблокировать его при вызове System.in.read()
в цикле, читая по одному байту за раз.
Каждый раз, когда читается байт, обновляйте свой собственный буфер текущей читаемой командой. Каждый символ, который набирается, добавляется в буфер. Если символ \b
, удалите последний символ в буфере. Когда вы обнаружите \r
или \n
, выполните команду в буфере и очистите ее.
Если вы получили стрелку вверх или вниз, отправьте число от \b
s до System.out
, равное длине буфера. Это сотрет локальную копию любой текущей вводимой команды. Затем распечатайте новую команду на System.out
и введите ее в буфер, заменив все, что там было. Это позволит пользователю удалить его, добавить к нему или просто нажать клавишу ввода, чтобы отправить его. Это имитирует функциональность bash.
Вы также можете обнаружить символ \t
(табуляция) и реализовать функцию завершения табуляции.