|
[ruby-list:42968] IRB on a text widget of Ruby/Tk: msg#00029lang.ruby.japanese
永井@知能.九工大です. 通常のコンソールを使わず,Ruby/Tk のテキストウィジェットを コンソール代わりにして IRB を動作させるものを Ruby/Tk のサンプルスクリプトとして作りましたので お知らせしておきます. これを最も嬉しく感じるのは,Windows ユーザかもしれません. Windows のコマンドプロンプトで IRB を動かした場合, コンソールからの読み込みで I/O がブロックしてしまうため, Ruby のスレッド切り替えがうまく行われませんでした. これは Thread.new{loop{sleep 2; p 111}} とでも実行してみれば 簡単に確認できると思います. 要は入出力にブロックしてしまう I/O を用いているのが原因ですので, ブロックしない入出力を用意してやればいいわけです. で,Ruby/Tk のテキストウィジェットをその目的に活用しています. # Ruby/TkORCA の開発の副産物を利用しています. Ruby/Tk を使ってますので,Ruby/Tk のイベントループも 裏で実行されており,Ruby/Tk のルートウィジェットも 表示された状態で起動されます. # ルートウィジェットを隠した状態で動作させるようなオプションを # 追加することは簡単ですが,今は対応していません. Tcl/Tk の wish をイメージしてもらえばいいかもしれません. wish のようにシェルコマンド等を呼び出したりはしませんが, インタラクティブに Ruby/Tk のウィジェットを作成したり 操作したりすることができます. # Linux では Thread.new{Tk.mainloop} の実行で OK でしたが, # Windows では I/O のブロックによりダメでした. なお,バックグラウンドで文字列が出力され続けていたとしても 入力しづらくはならないような工夫 (というほどでもないが) も 行っていますので,Win ユーザ以外にも利点があるかもしれません. もし興味があれば,お試しください. お試しいただける場合は,Ruby のソースコードの CVS において, ext/tk/sample ディレクトリにある tktextio.rb と irbtkw.rbw とを 入手し,同じディレクトリに置いてください. Ruby/Tk が使える ruby で irbtkw.rbw を実行すれば動作するはずです. きちんと試したわけではないですが,1.8.2 以降くらいなら 動作するのではないかと思います. # .rbw という拡張子は Windows 向けです. tktextio.rb というファイルは以前から存在しましたが, 今回かなりの変更が加えられた結果,以前のものは使えませんので ご注意下さい. 仕組みが仕組みですので,通常のコンソールに比べれば 非常に動作が遅い (特に1文字ごとに flush などされると悲惨) のですが, 少しでも楽しんでいただけますと幸いです. -- 永井 秀利 (九工大 知能情報) nagai-iKxUiVHJP4pSXnIrXG/8Ww@xxxxxxxxxxxxxxxx
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:42967] Re: apt-listbugs: soap4r での悩み, Kouhei Sutou |
|---|---|
| Next by Date: | [ruby-list:42969] iTerm上でのirbの日本語表示に関して, Kouta Osabe |
| Previous by Thread: | [ruby-list:42966] Re: Rubyインストール時のエラーについて, Yasunori Okamoto |
| Next by Thread: | [ruby-list:42969] iTerm上でのirbの日本語表示に関して, Kouta Osabe |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |