Получите пользовательский ввод консоли как напечатано, char за char

У меня есть консольное приложение в Elixir. Мне нужно интерпретировать ввод пользователя на основе нажатия клавиш. Например, мне нужно обработать «q» как команду, чтобы завершить сеанс без явного нажатия пользователем⏎ a.k.a. «возврат каретки».

IO.getn/2 удивительно ждет⏎ быть нажатым, буферизуя ввод (я почти уверен, что эта буферизация выполняется самой консолью, ноman stty не предоставляет никакой помощи / флага для отключения буферизации.)

Mix.Utils использовать бесконечный цикл скрыть пользовательский ввод (в основном, отправляя последовательность контроля возврата на консоль каждые 1 мс,)IEx код переносит вызовы к стандартным эрлангамio, которая обеспечивает единственную возможность установить обратный вызов натабуляция (для автозаполнения.)

Я думаю, что я должен использоватьPortприкрепить его к:stdin и запустить процесс для прослушивания ввода. К сожалению, я застрял при попытке реализовать последнее, так как мне нужно подключиться к запущенной в данный момент консоли, а не создавать новый порт для какого-либо другого процесса (как этоотлично описано здесь.)

Я упускаю что-то очевидное о том, как я могу прикрепитьPort к текущему процессу:stdin (что кстати указано вPort.list/0,) или я должен был построить всю 3-х канальную архитектуру, чтобы перенаправить то, что набрано:stdin и все, что хочет моя программаputs в:stdout?

Ответы на вопрос(2)

Ваш ответ на вопрос