如何让Ruby curses正确响应箭头键? KEY_UP常量似乎与我的输入不匹配。
我使用curses 1.0.1 gem运行Ruby 2.1.2。我试图用curses启用箭头键导航。我已经启用Curses#getch来获取单个密钥,而无需通过调用Curses#cbreak等待回车,这对于 k 字符工作正常。但是,我真的想启用箭头键导航,而不仅仅是HJKL用于移动。
目前,向上箭头在我的程序中打印27,这似乎是我的键盘为正向键提供的正确ordinal value:
"^[[A".ord
#=> 27
应与Curses KEY_UP constant匹配。它不是,因此通过else语句显示序数值。当ruby程序退出时,向上箭头键在命令提示符处将 [ A 作为两个单独的字符留下,这可能表示Curses#getch不是'正确捕捉按键。
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
答案 0 :(得分:4)
在启用键盘的行中,您实际上正在创建一个名为'键盘的局部变量'因为该方法在类Curses::Window
上。
由于您没有制作自己的窗口(除init_screen
之外),您可以使用stdscr方法引用标准窗口。如果我将第8行更改为:
stdscr.keypad = true
然后你的示例代码适合我。