gpt4 book ai didi

console - 获取控制台用户输入,按字符逐个字符输入

转载 作者:行者123 更新时间:2023-12-04 01:05:19 27 4
gpt4 key购买 nike

我在 Elixir 中有一个控制台应用程序。我需要在按键的基础上解释用户的输入。例如,我需要将“q”视为结束 session 的命令,而无需用户显式按 ⏎ 又名“回车”。

IO.getn/2 令人惊讶地等待 ⏎ 被按下,缓冲输入(我几乎可以肯定,这个缓冲是由控制台本身完成的,但是 man stty 没有提供任何帮助/标志来关闭缓冲。)
Mix.Utils use the infinite loop隐藏用户输入(基本上每 1 毫秒向控制台发送退格控制序列)IEx代码封装了对标准 erlang 的 io 的调用,它提供了在 Tab 上设置回调的唯一功能(用于自动完成。)

我的猜测是我必须使用 Port ,附上:stdin并产生一个进程来监听输入。不幸的是,我坚持尝试实现后者,因为我需要附加到当前运行的控制台,而不是为其他进程创建新端口(因为它是 perfectly described here 。)

我是否遗漏了一些关于如何附加 Port 的明显内容?到当前进程”:stdin (顺便说一句,在 Port.list/0 中列出,)或者我应该构建整个 3 管道架构以将输入的内容重定向到 :stdin以及我的程序想要的puts:stdout ?

最佳答案

您的程序无法获取 key ,因为在 Linux 上,终端默认位于 cooked mode ,它会缓冲所有按键,直到按下 Return 为止。

您需要将终端切换到原始模式,该模式会在按键发生时立即将按键发送到应用程序。没有跨平台可以做到这一点。

对于类 unix 系统,有 ncurses,它有一个 Elixir 绑定(bind),你应该检查一下:https://github.com/jfreeze/ex_ncurses .它甚至有一个例子来做你想做的事。

关于console - 获取控制台用户输入,按字符逐个字符输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39805210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com