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)