Ruby Curses 掌控回车键

4

我正在学习Curses类,但是在控制回车键方面遇到了麻烦。这是我目前的代码:

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,但 Ruby 中 ENTER 键的常量是 400ish。我没有使用花哨的键盘或任何东西;标准美国键盘。
1个回答

1

看起来Curses.nonl只是意味着当按下ENTER键时,会写入"\r"而不是"\r\n",所以我解决这个问题的唯一方法是使用Curses.raw禁用屏幕上的任何输出,并自己实现所有数据写入屏幕。

我不知道为什么常量不匹配。也许那是键盘上其他ENTER键的常量(在右下角)。不过并不重要,我可以使用puts Curses.getch来查找按键的编号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接