您好我正在使用curses开发一个小型控制台应用程序。
我有一个等待用户输入的主循环部分,它使用getstr函数,当然这等待用户按回车键。
我想捕捉上下和标签按键。我想这不能用getstr。
完成任何人都知道如何做到这一点?
编辑:我尝试过使用STDIN.getc来阻止应用程序运行,并且getch没有捕获箭头键
编辑#2:即时通讯在Windows上尝试此代码。似乎Curses.getch适用于Linux,但在Windows上我没有为向上箭头发送密钥。答案 0 :(得分:3)
您需要设置tty的“cbreak”模式,以便立即获得按键。如果你不这样做,Unix终端处理系统将缓冲输入,直到收到换行符(即用户点击ENTER
),然后输入将全部传递给进程。
这实际上不是Ruby-甚至是特定于curses的;这是所有应用程序在Unix tty中运行的方式。
尝试使用curses库cbreak()
功能打开此模式。退出前请不要忘记致电nocbreak()
将其关闭!
对于读取单个字符,STDIN.getc
将返回该字符的ASCII码的Fixnum。很可能你会发现STDIN.read(1)
更方便,因为它会返回下一个字符的单字符字符串。
但是,你会发现“向上/向下”键,如果用你的意思是箭头键,实际上是一系列字符。如今,在大多数类似ANSI的终端仿真器(例如xterm)上,向上箭头将是“\e[A
”(例如\e
是转义字符)。有termcap(终端能力)数据库来处理这类事情,你可以通过诅咒访问它们,但最初你可能会发现最容易尝试直接解释它们;如今,你不太可能使用ANSI代码之外的任何东西进入终端。
答案 1 :(得分:0)
你想要getch而不是getstr。另见curt sampson关于箭头键不是单个字符的评论。