使用Ruby在stdin上设置非规范模式

问题描述:

我正在使用Ruby制作一个简单的基于终端的游戏,我正在试图想出一种从终端读取输入的方式。使用Ruby在stdin上设置非规范模式

到目前为止,我一直在使用gets,但是我希望游戏能够在不需要换行的情况下立即做出反应(所以你不需要按一个键,那么输入)。

我已经想通了,我需要把终端设置为非规范模式,我假设我可以通过调用$stdin.ioctl来实现。问题是,我不知道我应该传递什么参数或标志,文档和搜索只是导致了有关底层C函数的信息。

任何人都可以告诉我什么,我应该打电话$stdin.ioctl与?我在OSX Leopard上使用Terminal.app/tcsh。

编辑:这是我最后使用,这要归功于MarkusQ:

%x{stty -icanon -echo} 
key = STDIN.read(1) 

你的问题是红宝石之外。

最简单的答案:将您的IO包装在%x {stty -raw echo}和%x {stty -raw echo}中以使用stty更改模式。

您可能会想要确保退出处理程序确保您退出时退出该模式。

- MarkusQ

+0

你让我在stty信息的正确轨道上。看了看,发现我需要什么。谢谢! – Luke 2009-02-25 11:01:27