H
Hidetoshi NAGAI
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.newcommand=>proc{
puts 'This procesure is on the controller-ip (Ruby-side)'
},
:text=>'print on controller-ip (Ruby-side)').packfill=>:x)
btns <<
TkButton.newcommand=>
'puts {This procesure is on the remote-ip (Tk-side)}',
:text=>'print on remote-ip (Tk-side)').packfill=>:x)
btns <<
TkButton.newcommand=>'ruby {
puts "This procedure is on the remote-ip (Ruby-side)"
p Array.new(3,"ruby")
}',
:text=>'ruby cmd on the remote-ip').packfill=>:x)
TkButton.newcommand=>'exit', :text=>'QUIT').packfill=>:x)
}
# setup controller-ip window
btns.each_with_index{|b, idx|
TkButton.newcommand=>proc{ip.eval_proc{b.flash}},
:text=>"flash button-#{idx}",
adx=>10).packpadx=>10, ady=>2)
}
TkButton.newcommand=>proc{exit}, :text=>'QUIT',
adx=>10, ady=>7).packpadx=>10, ady=>7)
# start eventloop
Tk.mainloop
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.newcommand=>proc{
puts 'This procesure is on the controller-ip (Ruby-side)'
},
:text=>'print on controller-ip (Ruby-side)').packfill=>:x)
btns <<
TkButton.newcommand=>
'puts {This procesure is on the remote-ip (Tk-side)}',
:text=>'print on remote-ip (Tk-side)').packfill=>:x)
btns <<
TkButton.newcommand=>'ruby {
puts "This procedure is on the remote-ip (Ruby-side)"
p Array.new(3,"ruby")
}',
:text=>'ruby cmd on the remote-ip').packfill=>:x)
TkButton.newcommand=>'exit', :text=>'QUIT').packfill=>:x)
}
# setup controller-ip window
btns.each_with_index{|b, idx|
TkButton.newcommand=>proc{ip.eval_proc{b.flash}},
:text=>"flash button-#{idx}",
adx=>10).packpadx=>10, ady=>2)
}
TkButton.newcommand=>proc{exit}, :text=>'QUIT',
adx=>10, ady=>7).packpadx=>10, ady=>7)
# start eventloop
Tk.mainloop