Как да заснема натискане на клавиш в Ruby?

В Ruby имам нужда от проста нишка, която да изпълнява някакъв код при всяко натискане на клавиш. Има ли начин това да стане?

Трябва да мога да заснема Page Up и Page 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

Това почти работи. Има само 1 проблем, трябва да натиснете return след всяко натискане на клавиш. Предполагам, че това се дължи на буферирания IO.


person Aleksandr Levchuk    schedule 04.09.2011    source източник


Отговори (1)


Можете да използвате библиотеката 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

person spike    schedule 04.09.2011