tty の「cbreak」モードを設定して、キーがすぐに押されるようにする必要があります。これを行わないと、Unix 端末処理システムは、改行が受信される (つまり、ユーザーが を押す) まで入力をバッファリングし、ENTERその時点ですべての入力がプロセスに渡されます。
これは実際には Ruby 固有でも、curses 固有でもありません。これは、Unix tty を介して実行されるすべてのアプリケーションが動作する方法です。
curses ライブラリcbreak()関数を使用して、このモードをオンにしてみてください。nocbreak()出る前に電話して電源を切るのを忘れずに!
単一の文字を読み取る場合、文字STDIN.getcの ASCII コードの Fixnum を返します。STDIN.read(1)次の文字の 1 文字の文字列を返すため、おそらくより便利であることがわかります。
ただし、「上/下」キーが矢印キーを意味する場合、実際には一連の文字であることがわかります。最近のほとんどの ANSI ライクなターミナル エミュレータ (xterm など) では、たとえば、上向き矢印は " \e[A" (\eエスケープ文字) になります。このようなことを処理するための termcap (端末機能) データベースがあり、curses を介してそれらにアクセスできますが、最初は、これらを直接解釈して実験するのが最も簡単であることに気付くかもしれません。最近では、ANSI コード以外を使用する端末に遭遇する可能性はほとんどありません。