From: Hidetoshi NAGAI Date: 2004-05-24T23:25:40+09:00 Subject: RemoteTkIp support on Ruby/Tk Hi, I committed the library to remote-control Ruby/Tk interpreters on the other proesses. The library is one of the application of MultiTkIp class, and is constructed from Tcl/Tk's 'send' command. # Please don't ask me how to make 'send' command available on # your environment. ;-) Please see the FAQ of Tcl/Tk. "New Tcl/Tk 8.5 Features" on the Tcl/Tk web site says ------------------------------------------------------ * send officially supported on Windows ------------------------------------------------------ So, you may be able to test the library on Windows with Tcl/Tk8.5a1 (I don't test it on Windows). The library 'remote-tk.rb' includes RemoteTkIp class. Please see the following sample script. It depends on its context that 'TkButton.new()' creates a button widget on which Ruby/Tk interpreter. ------------------------------------------------------ require 'remote-tk' # start sub-process ip_name = 'remote_ip' ip_list = TkWinfo.interps fork{ exec "/usr/bin/env ruby -r tk -e \"Tk.appname('#{ip_name}');Tk.mainloop\"" } sleep 1 until (app = (TkWinfo.interps - ip_list)[0]) && app =~ /^#{ip_name}/ p TkWinfo.interps # create RemoteTkIp object ip = RemoteTkIp.new(app) # setup remote-ip window btns = [] ip.eval_proc{ btns << TkButton.new(:command=>proc{ puts 'This procesure is on the controller-ip (Ruby-side)' }, :text=>'print on controller-ip (Ruby-side)').pack(:fill=>:x) btns << TkButton.new(:command=> 'puts {This procesure is on the remote-ip (Tk-side)}', :text=>'print on remote-ip (Tk-side)').pack(:fill=>:x) btns << TkButton.new(:command=>'ruby { puts "This procedure is on the remote-ip (Ruby-side)" p Array.new(3,"ruby") }', :text=>'ruby cmd on the remote-ip').pack(:fill=>:x) TkButton.new(:command=>'exit', :text=>'QUIT').pack(:fill=>:x) } # setup controller-ip window btns.each_with_index{|b, idx| TkButton.new(:command=>proc{ip.eval_proc{b.flash}}, :text=>"flash button-#{idx}", :padx=>10).pack(:padx=>10, :pady=>2) } TkButton.new(:command=>proc{exit}, :text=>'QUIT', :padx=>10, :pady=>7).pack(:padx=>10, :pady=>7) # start eventloop Tk.mainloop ------------------------------------------------------ If you are interested in the library, please get the latest sources from CVS (1.8.x or 1.9.x) and try it. Comments and bug reports are welcome. -- Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)