ジェムの win32console を Ruby1.9.1 で(マジックコメント)
「spec -c」でスペックのカラー表示をして試るのだが、win32console の所でエラーが起きてしまう。環境は、Windows XP Pro. SP3 にartonさんの Ruby 1.9.1パッケージ(ActiveScriptRuby and Other packagesより)をいれたもの、ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32]。(artonさんいつも有難うございます)
試しに irb してみるがエラー、「invalid multibyte char (US-ASCII)」。
[云々]>irb -r rubygems -r win32console C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1/gems/win32console-1.2.0-x86-mswin32-6 0/lib/win32console.rb:1:in `require': C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1 /gems/win32console-1.2.0-x86-mswin32-60/lib/Win32/Console/ANSI.rb:324: invalid m ultibyte char (US-ASCII) (SyntaxError) C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1/gems/win32console-1.2.0-x86-mswin32-6 0/lib/Win32/Console/ANSI.rb:324: invalid multibyte char (US-ASCII) C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1/gems/win32console-1.2.0-x86-mswin32-6 0/lib/Win32/Console/ANSI.rb:324: syntax error, unexpected $end, expecting ')' s.tr!("�≠ヤ・?炎牛誌髄駐舶沫・圀撼氈... ^ from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1/gems/win32console-1.2.0- x86-mswin32-60/lib/win32console.rb:1:in `<top (required)>' from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/irb/init.rb:262:in `require' from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/irb/init.rb:262:in `block in load_modules' from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/irb/init.rb:260:in `each' from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/irb/init.rb:260:in `load_modu les' from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/irb/init.rb:20:in `setup' from C:/PROGRA~1/RUBY-1~1.1/lib/ruby/1.9.1/irb.rb:53:in `start' from C:/PROGRA~1/RUBY-1~1.1/bin/irb.bat:20:in `<main>'
文字コードですね、所要のファイル、1.9系の gem の lib の Win32\Console\ANSI.rb 冒頭にマジックコメントを書いてやる。
# -*- coding: CP1250 -*-
コード指定は「CP1250」とした、ANSI.rb のエラー箇所ではその辺の判定をしてるっぽい。「Shift_JIS」では駄目でした。
で、また「irb -r rubygems -r win32console」今度はエラーダイアローグ「msvcrt-ruby18.dll」が見付りませんとの事、ダイアローグに答えれば irb 自体は起動する。ファイル見ると、1.9系の binディレクトリに「msvcrt-ruby191.dll」はあるんだけどね。「msvcrt-ruby18.dll」の方は 1.8系の binディレクトリに普通に存在する、1.9系コンソールではそっちへのパスを通してないので見付らないのでしょう。でもなんで 1.8系の dll を探しに行くかな。
そして「spec -c」でのカラー表示は出来るようになった、コマンド実行の毎にエラーダイアローグ出るけど。
それでもいいのか
(その後追記)
ちょっくら msvcrt-ruby191.dll をコピーして、191 を 18 に改名して誤魔化してみようとしたけど失敗、「lib/Console.so: [BUG] Segmentation fault」。
エラーメッセージみて lib/Win32/Console.rb を読んでみたんだけど、無いなら無いなりに何とかしてるみたい。Console.so の require に失敗したらピュアRuby版をとってくる(けどちょっと遅いよ)みたいな。
$DEBUGモードで実行するとその旨言ってくれるし、動くからいいや。
[云々]>irb -d -rrubygems -rwin32console Exception `LoadError' at C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1/gems/win32co nsole-1.2.0-x86-mswin32-60/lib/Console.so:0 - 126: 指定されたモジュールが見つか りません。 - C:/PROGRA~1/RUBY-1~1.1/lib/ruby/gems/1.9.1/gems/win32console-1.2. 0-x86-mswin32-60/lib/Console.so Using slower, non-DLL Console.rb irb(main):001:0>