2012-12-06 38 views
4

我正在学习Curses类,并且无法控制ENTER键。这是我的代码到目前为止:Ruby 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键,但ENTER键的Ruby常量是400ish。我没有使用花哨的键盘或任何东西;标准的美国人。

回答

1

好吧,好像Curses.nonl只是意味着当按下ENTER时,“\ r”被写入而不是“\ r \ n”,所以我设法解决这个问题的唯一方法是禁止任何输出到屏幕使用Curses.raw并自己实现所有写入屏幕的数据。

我不知道常量为什么不起作用。也许这是键盘上的ENTER键(在右下角)其他的常数。虽然并不重要,但我可以把Curses.getch找出钥匙的号码。