在一个小的Ruby应用程序中,我希望接受用户输入而不必等待回车。我的理解是需要启用cbreak模式才能使终端直接将用户输入提供给脚本。如何在Ruby终端应用程序中使用cbreak模式?
我试着在脚本的顶部简单地运行x%[cbreak()],但是没有奏效。我也看到可以使用(n)诅咒来获得相同的结果,尽管这看起来像是过度杀伤。
有没有人有关于如何实施这个建议?
感谢
在一个小的Ruby应用程序中,我希望接受用户输入而不必等待回车。我的理解是需要启用cbreak模式才能使终端直接将用户输入提供给脚本。如何在Ruby终端应用程序中使用cbreak模式?
我试着在脚本的顶部简单地运行x%[cbreak()],但是没有奏效。我也看到可以使用(n)诅咒来获得相同的结果,尽管这看起来像是过度杀伤。
有没有人有关于如何实施这个建议?
感谢
一种解决方案是使用shell的read
命令通过%x
。它似乎不适合做一些看起来像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
cbreak
是一个诅咒函数调用,所以%x
绝对不适用(即用于执行shell命令)。 cbreak
在标准curses库中定义,所以这可能是你最好的选择。
参见:
http://ruby-doc.org/stdlib/libdoc/curses/rdoc/classes/Curses.html#M000280
编辑:你也可以看看这避免了使用诅咒(我觉得这很难实现)Curses.getch
我误以为这是一个bash命令误解了cbreak。感谢澄清。 – Thomas 2011-01-05 17:47:42