4

Curses クラスを学習していますが、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 定数は 400 っぽいです。私は派手なキーボードなどを使用していません。スタンダードなアメリカン。

4

1 に答える 1

1

Curses.nonlエンターを押すと、「\r\n」ではなく「\r」が書き込まれることを意味しているように見えるので、この問題を解決する唯一の方法は、画面への出力を無効にしてCurses.rawすべてを実装することです自分で画面に書き込むデータ。

定数があまり上がらない理由がわかりません。おそらく、それはキーボードのもう 1 つのENTER キー (右下隅) の定数です。Curses.getchキーの番号を調べるために puts を実行できます。

于 2012-12-23T01:30:25.147 に答える