けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :16890 ] the message: "[ruby-list:16890] Re: RubyWin ",
on Sep/18 20:51(JST) Masaki Suketa writes:

>助田です.

>Version 0.0.0.2a には,超簡易インタラクティブモードがついてます.
>まだまだ irb の足元にも及びませんがそれを目指す第一歩ということで.
>
># 標準入出力を完璧にサポートしてしまえば irb がそのまま
># 使えそうな気もするんですが・・・.

入力に関しては, 変更が可能になっています.

irb/input-method.rbのIRB::InputMethodのサブクラスを適当に定義して下さい.
RubyWinからirbの起動は irb.rbをrequireしたあと, IRB::IRB.start を適当に
変更したメソッドを実行してください.

module IRB
  def IRB.start_on_rubywin
    bind = workspace_binding
    main = eval("self", bind)
    im = 適当なInputMethod
    
    irb = Irb.new(main, bind, im)

    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
    @CONF[:MAIN_CONTEXT] = irb.context

    trap("SIGINT") do
      irb.signal_handle
    end
    
    catch(:IRB_EXIT) do
      irb.eval_input
    end
    print "\n"
  end
end

上記のような感じでしょうか... ただ, 今のirbは起動しちゃうと処理が戻って
きませんので, 別スレッドとして実行する必要があるでしょうね.

>> また、デフォルトの設定では
>> puts "hello, world!"
>> と書けば、
>> RUBYWIN.puts "hello, world!"
>> の動作になるとか。
>
>ソース見ればわかることなんですが,最初の1行目で
>include RUBYWIN
>とやれば,それ以降は
>puts "hello, world!"
>で大丈夫だったりします.
>(RUBYWIN はクラスでなくてモジュール)
>
>ただ,この puts の仕様は深く考えないまま適当に
>作っちゃったので(近い)将来見直すかも知れません.
>(だからドキュメントにも書いてません.)

そうそう. irb出力は標準出力にだしちゃうので, 

module IRB
  include RUBYWIN
  class Irb
    include RUBYWIN
  end
end

を行なう必要がありますね.

# うーん. 本当にうまく動作するのだろうか...
__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---