如何让Ruby curses正确响应箭头键?
TL; DR
如何让Ruby curses正确响应箭头键? KEY_UP常量似乎与我的输入不匹配。
环境与问题描述
我正在使用curses 1.0.1 gem运行Ruby 2.1.2。 我正在尝试使用curses启用箭头键导航。 我已经启用Curses#getch来获取单个密钥,而无需通过调用Curses#cbreak来等待回车,这对于k字符工作正常。 但是,我真的想启用箭头键导航,而不仅仅是HJKL用于移动。
目前,我的程序中的向上箭头打印27,这似乎是我的键盘为up-arow键提供的正确的序数值 :
"^[[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
在启用键盘的行中,您实际上是在创建一个名为“keypad”的局部变量,因为该方法位于Curses::Window
类中。 由于您没有制作自己的窗口(除了使用init_screen
),您可以使用stdscr方法引用标准窗口。 如果我将第8行更改为:
stdscr.keypad = true
然后你的示例代码适合我。