如何在Ruby终端应用程序中使用cbreak模式?

时间:2011-01-05 15:32:25

标签: ruby input

在一个小型Ruby应用程序中,我希望无需等待回车即可接受用户输入。我的理解是,需要启用cbreak模式,以便终端将用户输入直接提供给脚本。

我尝试在脚本顶部运行x%[cbreak()],但这不起作用。我也看到有可能使用(n)curses来获得相同的结果,虽然这看起来有点矫枉过正。

有人建议如何实施吗?

由于

2 个答案:

答案 0 :(得分:1)

cbreak是一个curses函数调用,因此%x肯定不适用(用于执行shell命令)。 cbreak在标准curses库中定义,因此这可能是您最好的选择。

请参阅:
http://ruby-doc.org/stdlib/libdoc/curses/rdoc/classes/Curses.html#M000280

修改:您还可以查看Curses.getch

答案 1 :(得分:1)

避免使用curses(我发现很难实现)的一个解决方案是通过read使用shell的%x命令。它似乎没有感觉正确地进入shell来做一些看起来像Ruby的STDIN应该负责的事情,但它很简单并且有效。

#! /usr/bin/ruby

puts "Please enter your first initial"

str = %x[read -s -n1 keypress; echo $keypress]

puts "Your first inital is " + str