我在Elixir有一个控制台应用程序.我需要通过按键来解释用户的输入.例如,我需要将"q"视为结束会话的命令,而无需用户明确按" ⏎aka回车".
IO.getn/2
令人惊讶地等待⏎按下,缓冲输入(我几乎可以肯定,这个缓冲是由控制台本身完成的,但是man stty
没有提供任何帮助/标志来关闭缓冲.)
Mix.Utils
使用无限循环隐藏用户输入(基本上每隔1ms向控制台发送退格控制序列)IEx
代码包含对标准erlang的调用io
,这提供了设置回调的唯一能力Tab(用于自动完成).
我的猜测是我必须使用Port
,将它附加到:stdin
并生成一个进程来监听输入.不幸的是,我坚持尝试实现后者,因为我需要连接到当前运行的控制台,而不是为其他进程创建一个新端口(因为这里有完美的描述.)
我失去了对我怎么附加一个明显的东西Port
到当前进程的:stdin
(这是BTW列出Port.list/0
)或者我应该已经建立了全3管道架构重定向什么类型来:stdin
和任何我的程序要puts
到:stdout
?