Ruby/Tkがさっぱり動かない on Ruby 1.9.1-mswin32
今回は公式バイナリRuby 1.9.1-p129を使ってみることにした。C:\ruby19に展開。
require 'tk'
が固まる。
つまり、
>irb -rtk
でプロンプトさえ出てこないってことさ。
仕方がないので、ググったら、
|ruby-dev:38752| Re: |1.8.7||1.9.1||tk| 自前実装の拡張 widget を使いたい場合 (2009-07-08)
が見つかったけど、当てにならず。
もうちょっとスレッドを追うと、たった15時間ほど前にMLに投稿されたばかりの、cygwin上のruby/tk w/ ruby 1.9.1のトラブル
|ruby-dev:38805| Re: |1.8.7||1.9.1||tk| 自前実装の拡張 widget を使いたい場合 (2009-07-16)
が見つかって、解決しそうな雰囲気、未定。
cygwinでなくても、mswin32なら、逃げさせるように修正:
>diff -u c:\ruby19\lib\ruby\1.9.1\tk.rb.orig c:\ruby19\lib\ruby\1.9.1\tk.rb
--- c:\ruby19\lib\ruby\1.9.1\tk.rb.orig Fri Jan 16 00:35:58 2009 +++ c:\ruby19\lib\ruby\1.9.1\tk.rb Fri Jul 17 04:54:49 2009 @@ -1133,7 +1133,10 @@ if WITH_RUBY_VM ### check Ruby 1.9 !!!!!!! # *** NEED TO FIX *** ip = TclTkIp.new(name, opts) - if ip._invoke_without_enc('tk', 'windowingsystem') == 'aqua' && + if RUBY_PLATFORM =~ /cygwin|mswin32/ + RUN_EVENTLOOP_ON_MAIN_THREAD = true + INTERP = ip + elsif ip._invoke_without_enc('tk', 'windowingsystem') == 'aqua' && (TclTkLib.get_version <=> [8,4,TclTkLib::RELEASE_TYPE::FINAL,9]) > 0 # *** KNOWN BUG *** # Main event loop thread of TkAqua (> Tk8.4.9) must be the main
って具合。
これで、なんとか固まらなくなったよ、やっと。
なんとタイムリーなお話なんだ。。。ったく。