Rabbit 0.9.0 がリリースされていたので使ってみようと思って、せっかくだから Ruby 1.9.1 で動かそうと試みました。
いろいろやったんですが、たぶん次の手順でいけると思います。
$ sudo aptitude install ruby1.9.1 ruby1.9.1-dev libcairo2-dev libpango1.0-dev libatk1.0-dev libgtk2.0-dev librsvg2-dev libpoppler-glib-dev $ wget http://www.moonwolf.com/ruby/archive/rdtool-0.6.22.tar.gz $ tar xpvfz rdtool-0.6.22.tar.gz $ cd rdtool-0.6.22 $ sudo ruby1.9.1 ./setup.rb $ sudo gem1.9.1 install rabbit
これで /var/lib/gems/1.9.1/bin/rabbit を実行すれば動く… はずなのですが動きません。
% /var/lib/gems/1.9.1/bin/rabbit /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/keys.rb:8:in `<module:Keys>': uninitialized constant Gdk::Keyval::GDK_Escape (NameError) from /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/keys.rb:5:in `<module:Rabbit>' from /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/keys.rb:4:in `<top (required)>' from <internal:lib/rubygems/custom_require>:29:in `require' from <internal:lib/rubygems/custom_require>:29:in `require' from /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/logger/gui.rb:3:in `<top (required)>' ...以下略...
Gdk::Keyval::GDK_Escape なんて定数がないのが原因みたいです。Gdk::Keyval::GDK_KEY_Escape ならあります。
% ruby1.9.1 -rgtk2 -e 'Gdk::Keyval::GDK_Escape' -e:1:in `<main>': uninitialized constant Gdk::Keyval::GDK_Escape (NameError) % ruby1.9.1 -rgtk2 -e 'Gdk::Keyval::GDK_KEY_Escape'
Ruby の Gtk ライブラリは、C の Gtk のヘッダファイルにある定数をもとに、Ruby の定数を作っているので、おそらく Gtk のバージョンによるものだと思います。
Gtk ライブラリは gem で勝手にインストールされたものなので、いじるのは面倒だから Rabbit 側をいじって対処してみます。
--- /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/keys.rb.orig 2010-10-21 19:31:36.375808179 +0900 +++ /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/keys.rb 2010-10-21 19:48:14.221358661 +0900 @@ -1,6 +1,12 @@ require "gtk2" require "rabbit/utils" +Gdk::Keyval.constants.each do |c| + if c.to_s =~ /\AGDK_KEY_(.*)\z/ + Gdk::Keyval.const_set("GDK_#{$1}", Gdk::Keyval.const_get(c)) + end +end + module Rabbit module Keys
Gdk::Keyval::GDK_KEY_xxx があったら Gdk::Keyval::GDK_xxx を定義しています。どこでも良かったんですが、keys.rb でエラーになったので、その先頭に入れてみました。
これでちゃんと動くようになりました。
…が、全画面表示にするなどウィンドウをリサイズすると、表示が崩れてしまいます。
落ちはしないのですが、端末にはこんなエラー出てます。
/var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/renderer/engine/gdk.rb: line 176 Gdk-CRITICAL **:IA__gdk_gc_new: assertion `drawable != NULL' failed [WARNING] RuntimeError: failed to initialize /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/renderer/engine/gdk.rb:176:in `initialize' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/renderer/engine/gdk.rb:176:in `new' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/renderer/engine/gdk.rb:176:in `init_engine_color' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/renderer/display/drawing-area.rb:22:in `init_color' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/renderer/base.rb:228:in `clear_theme' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/canvas.rb:718:in `clear_theme' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/canvas.rb:655:in `_apply_theme' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/canvas.rb:307:in `apply_theme' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/canvas.rb:323:in `reload_theme' /var/lib/gems/1.9.1/gems/rabbit-0.9.0/lib/rabbit/action/basic.rb:118:in `act_reload_theme' ...以下略...
これはちょっと自分の手には負えないので、あきらめました。リサイズしなければ良いので、全画面表示にしたい場合は -f オプションつきで起動すれば最初から全画面表示になります。