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

时间:2009-02-24 15:33:19

标签: ruby terminal stdin ioctl

我正在玩用Ruby制作一个简单的基于终端的游戏,我现在正试图想出一种从终端读取输入的方法。

到目前为止,我一直在使用gets,但我想让游戏立即做出反应而不需要换行(因此您无需按键,然后输入)。

我发现我需要将终端设置为非规范模式,我假设我可以通过调用$stdin.ioctl来实现。问题是,我不确定我应该传递哪些参数或标志,文档和搜索只会导致有关底层C函数的信息。

有谁可以告诉我应该给$stdin.ioctl打电话的是什么?我在OSX Leopard上使用Terminal.app/tcsh。

编辑:这是我最终使用的,感谢MarkusQ:

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

1 个答案:

答案 0 :(得分:3)

你的问题不在红宝石之外。

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

您可能希望这样做并确保退出处理程序以确保退出时确定模式已被设置。

- MarkusQ