それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

キーボードLEDを点滅させて遊ぶRuby

Rubyクックブックを見ていたらLEDをチカチカさせて遊ぶ方法が載ってたのでやってみた.

キーボードLEDを点滅(明滅)させる

require 'rubygems'
require 'blinkenlights'
BlinkenLights.open{|l|
10.times{ l.right_to_left}
}

何の意味もないけど,楽しい.

注意点Windowsnではキー点滅するとNumlockも連動

blinkenlights楽しいけれどWindowsだと実用性が無い。それはキー状態も書き換わるからだ.

  1. UNIXだとキー状態と切り離してLEDがチカチカ出来る
  2. Windowsだと出来ない。LEDが付くとNumlockも連動する,

さらに注意点ruby Mingw版だと動く。
Cygwin版だとUNIXに解釈されて動かない。

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

にそれぞれ対応している

ドキュメント

ドキュメントは
Class: BlinkenLights
にある
reset
off
circle
reverse_circle
falsh

などが他にも使える.

楽しい

意味もなく、楽しい