Ruby键盘事件处理

你好,我用curses来开发一个小的控制台应用程序

我有一个主循环部分等待用户input,它使用getstr函数,当然这个等待用户按回车。

我想捕捉上下和选项卡的按键。 我想这不能用getstr来完成。

任何人有任何想法如何做到这一点?

编辑:我已经尝试使用STDIN.getc这将阻止应用程序运行,getch不捕获箭头键

编辑#2:即时通讯在Windows上尝试此代码。 似乎Curses.getch适用于Linux,但在Windows上,我没有得到向上箭头发送的密钥。

Solutions Collecting From Web of "Ruby键盘事件处理"

您需要设置tty的“cbreak”模式,以便立即获得按键。 如果不这样做,Unix终端处理系统将缓冲输入,直到收到一个换行符(即用户点击ENTER ),输入将全部交给进程。

这实际上并不是Ruby–甚至是诅咒特定的; 这是通过Unix tty运行的所有应用程序的方式。

尝试使用curses库cbreak()函数打开此模式。 不要忘记在退出之前调用nocbreak()来关闭它!

为了读取单个字符, STDIN.getc将返回该字符的ASCII码的Fixnum。 很可能你会发现STDIN.read(1)更方便,因为它返回下一个字符的一个字符的字符串。

然而,你会发现“上/下”键,如果你的意思是箭头键,实际上是一个字符序列。 在大多数类似于ANSI的终端仿真器(如xterm)中,向上箭头将是“ \e[A ”( \e是一个转义字符)。 有termcap(终端能力)数据库来处理这种事情,你可以通过curses来访问它们,但是从内在的角度来看,你可能会发现最简单的做法就是直接尝试解释这些。 这些日子里,你不太可能使用ANSI代码以外的任何其他终端。

你想getch而不是getstr。 还可以看到简·桑普森对箭头键不是单个字符的评论。