TL;DR
如何使Ruby curses响应箭头键?KEY_UP常量似乎不能匹配我的输入。
环境和问题描述
我正在运行使用curses 1.0.1 gem的Ruby 2.1.2版本。我试图启用带有curses的箭头键导航,通过调用Curses#cbreak启用Curses#getch获取单个密钥而无需等待回车符,对于字符k来说这很好用。但是,我真的想启用箭头键导航,而不仅仅是HJKL进行移动。
目前,在我的程序中,向上箭头打印27,这似乎是我键盘为向上箭头键给出的正确ordinal value:
"^[[A".ord
#=> 27
应该使用Curses KEY_UP常量来匹配,但它没有被匹配,因此会执行else语句来显示序数值。当ruby程序退出时,向上箭头键还会将[A留在命令提示符中,这可能表明Curses#getch无法正确捕获按键。
我的Ruby代码
require 'curses'
include Curses
begin
init_screen
cbreak
noecho
keypad = true
addstr 'Check for up arrow or letter k.'
refresh
ch = getch
addch ?\n
case ch
when KEY_UP
addstr "up arrow \n"
when ?k
addstr "up char \n"
else
addstr "%s\n" % ch
end
refresh
sleep 1
ensure
close_screen
end
include Curses
。那么为什么#keypad = 在这方面似乎是独特的呢? - Todd A. Jacobs