如何捕获Ruby中的按键?

在Ruby中,我需要一个简单的线程,每次按下一个键时都会运行一些代码。 有没有办法做到这一点?

我需要能够捕获Page UpPage Down

这是我尝试过的:

#!/usr/bin/env ruby Thread.new do while c = STDIN.getc puts c.chr end end loop do puts Time.new sleep 0.7 end 

这几乎可行。 只有一个问题,每个击键后都需要回击。 我想这是因为缓冲的IO。

您可以使用curses库捕获按键而不进行缓冲。

 require 'curses' Curses.noecho # do not show typed keys Curses.init_screen Curses.stdscr.keypad(true) # enable arrow keys (required for pageup/down) loop do case Curses.getch when Curses::Key::PPAGE Curses.setpos(0,0) Curses.addstr("Page Up") when Curses::Key::NPAGE Curses.setpos(0,0) Curses.addstr("Page Dn") end end 

关键代码在这里:

http://ruby-doc.org/stdlib/libdoc/curses/rdoc/index.html

你可以在github上找到一个更长的例子:

https://github.com/grosser/tic_tac_toe/blob/master/bin/tic_tac_toe