araMenu
「メニュー表示→選択実行」をお手軽に実現できる様に、araMenu.rb というのを作って使っている。
例えば、
a = %w(http://www.goo.ne.jp http://www.yahoo.co.jp http://google.com) AraMenu.new(a).select{|i| `fiber #{a[i]}`}
てな感じで実行すると、渡した配列をメニューにして画面上に表示され、メニューを選択するとその番号に従って与えたブロックが実行されるだけのスクリプト。上記の場合だと、指定されたURLがブラウザで表示される。
このスクリプト、メニューを表示するメソッドが選択できる様になっていて、現在のところ、
Ruby/Tk、Tcl/Tk、vruby、curses、Qt
のいずれかが選択できる。つまり、Windows環境、Linux環境、CLI環境、LinuxZaurus環境のそれぞれで、同じスクリプトがそのまま実行できる様になってる。
class AraMenu def initialize(menu, how = nil) @menu = menu if how == nil case RUBY_PLATFORM when 'arm-linux'; @how = 'qt' when 'i386-cygwin';@how = 'tk' when 'i386-mswin32';@how = 'vr' else @how = 'cu' end else @how = how end end def select(&block) case @how when 'tk'; select_tk(&block) when 'tcltk'; select_tcltk(&block) when 'qt'; select_qt(&block) when 'vr'; select_vr(&block) else select_cu(&block) end end def select_tcltk(&block) open("|wish","r+") do |f| @menu.size.times do |i| f.printf "button .b%d -text {%s} -command { puts {%d} }\n",i,@menu[i],i f.printf "pack .b%d\n",i end f.flush while s = f.gets if block block.call(s.to_i) else return s.to_i end end end end def select_vr(&block) require 'vr/vruby' require "vr/vrcontrol" frm = VRLocalScreen.newform $menu = @menu $block = block $ret = 0 def frm.construct self.caption= "VisualuRuby Sample1" $menu.size.times do |i| addControl(VRButton,"b"+i.to_s,$menu[i],4,20*i,940,18) end # …以下略…
こんな感じ。
美しくない。