Rubyクックブックを見ていたらLEDをチカチカさせて遊ぶ方法が載ってたのでやってみた.
キーボードLEDを点滅(明滅)させる
require 'rubygems' require 'blinkenlights' BlinkenLights.open{|l| 10.times{ l.right_to_left} }
何の意味もないけど,楽しい.
注意点Windowsnではキー点滅するとNumlockも連動
blinkenlights楽しいけれどWindowsだと実用性が無い。それはキー状態も書き換わるからだ.
- UNIXだとキー状態と切り離してLEDがチカチカ出来る
- Windowsだと出来ない。LEDが付くとNumlockも連動する,
cygwinの場合のError
エラー箇所を調べると・・・
>Errno::ENOENT: No such file or directory - NUL >from /usr/lib/ruby/gems/1.8/gems/blinkenlights-0.1.0/lib/blinkenlights.rb:91:in `initialize' >from /usr/lib/ruby/gems/1.8/gems/blinkenlights-0.1.0/lib/blinkenlights.rb:91:in `new' >from /usr/lib/ruby/gems/1.8/gems/blinkenlights-0.1.0/lib/blinkenlights.rb:91:in `initialize' >from /usr/lib/ruby/gems/1.8/gems/blinkenlights-0.1.0/lib/blinkenlights.rb:118:in `new' >from /usr/lib/ruby/gems/1.8/gems/blinkenlights-0.1.0/lib/blinkenlights.rb:118:in `open' >from (irb):3
NULという仮想ファイル(Windows用)を開こうとして落ちている。仕方ないのでソースを書換えた
cygwin 要所修正
blinkenlights.rb
> > if defined? ::Win32API > def initialize(ignored = nil, delay = DEF_DELAY) # :nodoc: > @tty = File.new('NUL', File::RDWR) if File.exist? 'NULL' > @tty = File.new('/dev/null', File::RDWR) if File.exist? '/dev/null' > @delay = delay > @old_leds = get > end > else > # Creates a BlinkenLights instance for _tty_, a full pathname like > # '/dev/tty8' to control the LEDs. This parameter is ignored under the > # Windows operating system. > # > # _delay_ is the standard delay in seconds, > # that is slept everytime the LED state is changed. If _delay_ is too small > # your keyboard may become confused about its LEDs' status. > def initialize(tty = DEF_TTY, delay = DEF_DELAY) > @tty = File.new('NUL', File::RDWR) if File.exist? 'NULL' > @tty = File.new('/dev/null', File::RDWR) if File.exist? '/dev/null' > @delay = delay > @old_leds = get > end > end
これでチカチカする。
使い方はこんな感じ
全部を点滅させて消す
require 'rubygems' require 'blinkenlights' BlinkenLights.open{|l| l.left = true l.middle = true l.right = true l.left = false l.middle = false l.right = false }
順番に点滅させて遊ぶ
BlinkenLights.open{|l| 10.times{ l.left_to_right} 10.times{ l.random } 10.times{ l.right_to_left} 10.times{ l.left_to_right;l.right_to_left} }
左から右へ
BlinkenLights.open{|l| l.left_to_right }
キーとメソッドの名前の対応
NumLock : left
Capslock : middle
ScrollLocl : right
にそれぞれ対応している
楽しい
意味もなく、楽しい