我正在学习 Curses 类(class),但无法控制 ENTER 键。到目前为止,这是我的代码:
require 'curses'
win = Curses::Window.new(0, 0, 0, 0)
Curses.init_screen
Curses.cbreak
Curses.nonl
Curses.stdscr.keypad(true)
loop do
case Curses.getch
when 13 # Enter
Curses.addstr "abc"
when 8 # Backspace
Curses.delch
end
end
win.close
问题是,当我按下 ENTER 键时,“abc”被写入屏幕(正如预期的那样);但是,当我第二次按 ENTER 键时,“abc”只是重新写入屏幕上的相同位置。似乎首先按下 ENTER 键将光标位置设置为 (0,0),然后添加字符串。如何停止将光标位置设置为 (0,0)?
此外,出于某种原因,常量与我的键不匹配,因此 ENTER 键是键 13,而 ENTER 键的 Ruby 常量是 400ish。我没有使用花哨的键盘或任何东西;标准的美国。
最佳答案
好吧,好像 Curses.nonl
只是意味着当按下 ENTER 时,写的是“\r”而不是“\r\n”,所以我设法解决这个问题的唯一方法问题是使用 Curses.raw
禁用任何输出到屏幕并自己实现所有数据写入屏幕。
我不知道为什么常量没有太大变化。也许这就是键盘上(右下角)other ENTER 键的常量。不过这并不重要,我只需执行 puts Curses.getch
即可找出 key 的编号。
关于Ruby Curses 控制回车键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741317/