mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266]
* ext/tk/lib/tk/text.rb: fix typo * ext/tk/lib/multi-tk.rb: improve safe-level treatment on slave IPs git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
abcd179a2b
commit
0a054a5fd8
8 changed files with 207 additions and 44 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Fri Sep 3 02:12:48 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
|
* ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266]
|
||||||
|
|
||||||
|
* ext/tk/lib/tk/text.rb: fix typo
|
||||||
|
|
||||||
|
* ext/tk/lib/multi-tk.rb: improve safe-level treatment on slave IPs
|
||||||
|
|
||||||
Fri Sep 3 01:54:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Fri Sep 3 01:54:20 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* ext/extmk.rb (extmake): extact target prefix from Makefiles.
|
* ext/extmk.rb (extmake): extact target prefix from Makefiles.
|
||||||
|
|
|
@ -5,10 +5,10 @@ Tcl/Tk libraries or header files are installed but are not found, you can
|
||||||
give the information by arguments of the 'configure' script. Please give
|
give the information by arguments of the 'configure' script. Please give
|
||||||
some or all of the following options.
|
some or all of the following options.
|
||||||
|
|
||||||
--with-tcllib=<libname> (e.g. libtcl8.3.so ==> --with-tcllib=tcl8.3)
|
--with-tcllib=<libname> (e.g. libtcl8.4.so ==> --with-tcllib=tcl8.4)
|
||||||
--with-tklib=<libname> (e.g. libtk8.3.so ==> --with-tklib=tk8.3)
|
--with-tklib=<libname> (e.g. libtk8.4.so ==> --with-tklib=tk8.4)
|
||||||
|
|
||||||
--enable-tcltk_stubs (if you force to enable stubs)
|
--enable-tcltk_stubs (if you force to enable stubs)
|
||||||
|
|
||||||
--with-tcl-dir=<path>
|
--with-tcl-dir=<path>
|
||||||
equal to "--with-tcl-include=<path>/include --with-tcl-lib=<path>/lib"
|
equal to "--with-tcl-include=<path>/include --with-tcl-lib=<path>/lib"
|
||||||
|
@ -16,18 +16,20 @@ some or all of the following options.
|
||||||
--with-tk-dir=<path>
|
--with-tk-dir=<path>
|
||||||
equal to "--with-tk-include=<path>/include --with-tk-lib=<path>/lib"
|
equal to "--with-tk-include=<path>/include --with-tk-lib=<path>/lib"
|
||||||
|
|
||||||
--with-tcl-include=<dir> the directry containts 'tcl.h'
|
--with-tcl-include=<dir> the directry containts 'tcl.h'
|
||||||
--with-tk-include=<dir> the directry containts 'tk.h'
|
--with-tk-include=<dir> the directry containts 'tk.h'
|
||||||
|
|
||||||
--with-tcl-lib=<dir> the directry containts 'libtcl<version>.so'
|
--with-tcl-lib=<dir> the directry containts 'libtcl<version>.so'
|
||||||
--with-tk-lib=<dir> the directry containts 'libtk<version>.so'
|
--with-tk-lib=<dir> the directry containts 'libtk<version>.so'
|
||||||
|
|
||||||
|
--enable-mac-tcltk-framework (Mac OSX only) use Tcl/Tk framework
|
||||||
|
|
||||||
If you forgot to give the options when do 'configure' on toplevel
|
If you forgot to give the options when do 'configure' on toplevel
|
||||||
directry of Ruby sources, please try something like as the followings.
|
directry of Ruby sources, please try something like as the followings.
|
||||||
|
|
||||||
$ cd ext/tcltklib
|
$ cd ext/tcltklib
|
||||||
$ rm Makefile
|
$ rm Makefile
|
||||||
$ CONFIGURE_ARGS='--with-tcl-include=/usr/local/include/tcl8.3/ --with-tcllib=tcl8.3 --with-tklib=tk8.3 --enable-tcltk_stubs' ruby extconf.rb
|
$ CONFIGURE_ARGS='--with-tcl-include=/usr/local/include/tcl8.4/ --with-tcllib=tcl8.4 --with-tklib=tk8.4' ruby extconf.rb
|
||||||
|
|
||||||
|
|
||||||
*** ATTENTION ***
|
*** ATTENTION ***
|
||||||
|
|
|
@ -19,8 +19,8 @@ For example, when you install ActiveTcl-8.4.x to '/usr/local/ActiveTcl',
|
||||||
|
|
||||||
configure --with-tcl-dir=/usr/local/ActiveTcl/ \
|
configure --with-tcl-dir=/usr/local/ActiveTcl/ \
|
||||||
--with-tk-dir=/usr/local/ActiveTcl/ \
|
--with-tk-dir=/usr/local/ActiveTcl/ \
|
||||||
--with-tcllib=tcl8.4 \
|
--with-tcllib=tclstub8.4 \
|
||||||
--with-tklib=tk8.4 \
|
--with-tklib=tkstub8.4 \
|
||||||
--enable-tcltk-stubs
|
--enable-tcltk-stubs
|
||||||
|
|
||||||
It depends on your environment that you have to add the directory of
|
It depends on your environment that you have to add the directory of
|
||||||
|
|
|
@ -4139,7 +4139,7 @@ invoke_queue_handler(evPtr, flags)
|
||||||
if (rb_safe_level() != q->safe_level) {
|
if (rb_safe_level() != q->safe_level) {
|
||||||
volatile VALUE q_dat;
|
volatile VALUE q_dat;
|
||||||
q_dat = Data_Wrap_Struct(rb_cData,invoke_queue_mark,0,q);
|
q_dat = Data_Wrap_Struct(rb_cData,invoke_queue_mark,0,q);
|
||||||
ret = rb_funcall(rb_proc_new(evq_safelevel_handler, q_dat),
|
ret = rb_funcall(rb_proc_new(ivq_safelevel_handler, q_dat),
|
||||||
ID_call, 0);
|
ID_call, 0);
|
||||||
} else {
|
} else {
|
||||||
DUMP2("call invoke_real (for caller thread:%lx)", q->thread);
|
DUMP2("call invoke_real (for caller thread:%lx)", q->thread);
|
||||||
|
|
|
@ -112,18 +112,32 @@ class MultiTkIp
|
||||||
######################################
|
######################################
|
||||||
|
|
||||||
def set_safe_level(safe)
|
def set_safe_level(safe)
|
||||||
|
@safe_level[0] = safe
|
||||||
@cmd_queue.enq([@system, 'set_safe_level', safe])
|
@cmd_queue.enq([@system, 'set_safe_level', safe])
|
||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
def safe_level=(safe)
|
||||||
|
set_safe_level(safe)
|
||||||
|
end
|
||||||
def self.set_safe_level(safe)
|
def self.set_safe_level(safe)
|
||||||
__getip.set_safe_level(safe)
|
__getip.set_safe_level(safe)
|
||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
def self.safe_level=(safe)
|
||||||
|
self.set_safe_level(safe)
|
||||||
|
end
|
||||||
|
def safe_level
|
||||||
|
@safe_level[0]
|
||||||
|
end
|
||||||
|
def self.safe_level
|
||||||
|
__getip.safe_level
|
||||||
|
end
|
||||||
|
|
||||||
|
def _create_receiver_and_watchdog(lvl = $SAFE)
|
||||||
|
lvl = $SAFE if lvl < $SAFE
|
||||||
|
|
||||||
def _create_receiver_and_watchdog()
|
|
||||||
# command-procedures receiver
|
# command-procedures receiver
|
||||||
receiver = Thread.new{
|
receiver = Thread.new(lvl){|safe_level|
|
||||||
safe_level = $SAFE
|
|
||||||
loop do
|
loop do
|
||||||
thread, cmd, *args = @cmd_queue.deq
|
thread, cmd, *args = @cmd_queue.deq
|
||||||
if thread == @system
|
if thread == @system
|
||||||
|
@ -143,17 +157,88 @@ class MultiTkIp
|
||||||
# procedure
|
# procedure
|
||||||
begin
|
begin
|
||||||
ret = proc{$SAFE = safe_level; cmd.call(*args)}.call
|
ret = proc{$SAFE = safe_level; cmd.call(*args)}.call
|
||||||
rescue SystemExit
|
rescue SystemExit => e
|
||||||
# delete IP
|
# delete IP
|
||||||
unless @interp.deleted?
|
unless @interp.deleted?
|
||||||
# if @interp._invoke('info', 'command', '.') != ""
|
@slave_ip_tbl.each_value{|subip|
|
||||||
# @interp._invoke('destroy', '.')
|
unless subip.deleted?
|
||||||
# end
|
begin
|
||||||
# @interp.delete
|
subip._invoke('destroy', '.')
|
||||||
@interp._eval_without_enc('exit')
|
rescue Exception
|
||||||
|
end
|
||||||
|
subip.delete
|
||||||
|
# subip._invoke('exit')
|
||||||
|
# subip._eval_without_enc('exit')
|
||||||
|
end
|
||||||
|
}
|
||||||
|
begin
|
||||||
|
@interp._invoke('destroy', '.')
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
if safe?
|
||||||
|
# do 'exit' to call the delete_hook procedure
|
||||||
|
@interp._eval_without_enc('exit')
|
||||||
|
else
|
||||||
|
@interp.delete
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if e.backtrace[0] =~ /\`exit'/
|
||||||
|
_check_and_return(thread, MultiTkIp_OK.new(true))
|
||||||
|
elsif e.backtrace[0] =~ /\`(exit!|abort)'/
|
||||||
|
_check_and_return(thread, MultiTkIp_OK.new(false))
|
||||||
|
else
|
||||||
|
_check_and_return(thread, MultiTkIp_OK.new(nil))
|
||||||
end
|
end
|
||||||
_check_and_return(thread, MultiTkIp_OK.new(nil))
|
|
||||||
break
|
break
|
||||||
|
rescue SecurityError => e
|
||||||
|
# ignore security error in 'exit', 'exit!', and 'abort'
|
||||||
|
if e.backtrace[0] =~ /\`exit'/
|
||||||
|
unless @interp.deleted?
|
||||||
|
@slave_ip_tbl.each_value{|subip|
|
||||||
|
unless subip.deleted?
|
||||||
|
begin
|
||||||
|
subip._invoke('destroy', '.')
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
subip.delete
|
||||||
|
# subip._invoke('exit')
|
||||||
|
# subip._eval_without_enc('exit')
|
||||||
|
end
|
||||||
|
}
|
||||||
|
begin
|
||||||
|
@interp._invoke('destroy', '.')
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
# @interp.delete
|
||||||
|
@interp._eval_without_enc('exit')
|
||||||
|
end
|
||||||
|
_check_and_return(thread, MultiTkIp_OK.new(true))
|
||||||
|
break
|
||||||
|
elsif e.backtrace[0] =~ /\`(exit!|abort)'/
|
||||||
|
unless @interp.deleted?
|
||||||
|
@slave_ip_tbl.each_value{|subip|
|
||||||
|
unless subip.deleted?
|
||||||
|
begin
|
||||||
|
subip._invoke('destroy', '.')
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
subip.delete
|
||||||
|
# subip._invoke('exit')
|
||||||
|
# subip._eval_without_enc('exit')
|
||||||
|
end
|
||||||
|
}
|
||||||
|
begin
|
||||||
|
@interp._invoke('destroy', '.')
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
# @interp.delete
|
||||||
|
@interp._eval_without_enc('exit')
|
||||||
|
end
|
||||||
|
_check_and_return(thread, MultiTkIp_OK.new(false))
|
||||||
|
break
|
||||||
|
else
|
||||||
|
_check_and_return(thread, e)
|
||||||
|
end
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
# raise exception
|
# raise exception
|
||||||
_check_and_return(thread, e)
|
_check_and_return(thread, e)
|
||||||
|
@ -230,9 +315,11 @@ class MultiTkIp
|
||||||
|
|
||||||
@threadgroup = Thread.current.group
|
@threadgroup = Thread.current.group
|
||||||
|
|
||||||
|
@safe_level = [$SAFE]
|
||||||
|
|
||||||
@cmd_queue = Queue.new
|
@cmd_queue = Queue.new
|
||||||
|
|
||||||
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog()
|
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0])
|
||||||
|
|
||||||
@threadgroup.add @cmd_receiver
|
@threadgroup.add @cmd_receiver
|
||||||
@threadgroup.add @receiver_watchdog
|
@threadgroup.add @receiver_watchdog
|
||||||
|
@ -535,17 +622,37 @@ class MultiTkIp
|
||||||
|
|
||||||
name, safe, safe_opts, tk_opts = _parse_slaveopts(keys)
|
name, safe, safe_opts, tk_opts = _parse_slaveopts(keys)
|
||||||
|
|
||||||
|
safe = 4 if safe && !safe.kind_of?(Fixnum)
|
||||||
|
|
||||||
if safeip == nil
|
if safeip == nil
|
||||||
# create master-ip
|
# create master-ip
|
||||||
@interp = TclTkIp.new(name, _keys2opts(tk_opts))
|
@interp = TclTkIp.new(name, _keys2opts(tk_opts))
|
||||||
@ip_name = nil
|
@ip_name = nil
|
||||||
|
if safe
|
||||||
|
safe = $SAFE if safe < $SAFE
|
||||||
|
@safe_level = [safe]
|
||||||
|
else
|
||||||
|
@safe_level = [$SAFE]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
# create slave-ip
|
# create slave-ip
|
||||||
if safeip || master.safe?
|
if safeip || master.safe?
|
||||||
@interp, @ip_name = master.__create_safe_slave_obj(safe_opts,
|
@interp, @ip_name = master.__create_safe_slave_obj(safe_opts,
|
||||||
name, tk_opts)
|
name, tk_opts)
|
||||||
|
if safe
|
||||||
|
safe = master.safe_level if safe < master.safe_level
|
||||||
|
@safe_level = [safe]
|
||||||
|
else
|
||||||
|
@safe_level = [4]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
@interp, @ip_name = master.__create_trusted_slave_obj(name, tk_opts)
|
@interp, @ip_name = master.__create_trusted_slave_obj(name, tk_opts)
|
||||||
|
if safe
|
||||||
|
safe = master.safe_level if safe < master.safe_level
|
||||||
|
@safe_level = [safe]
|
||||||
|
else
|
||||||
|
@safe_level = [master.safe_level]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
@set_alias_proc = proc{|name|
|
@set_alias_proc = proc{|name|
|
||||||
master._invoke('interp', 'alias', @ip_name, name, '', name)
|
master._invoke('interp', 'alias', @ip_name, name, '', name)
|
||||||
|
@ -558,7 +665,7 @@ class MultiTkIp
|
||||||
|
|
||||||
@cmd_queue = Queue.new
|
@cmd_queue = Queue.new
|
||||||
|
|
||||||
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog()
|
@cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog(@safe_level[0])
|
||||||
|
|
||||||
@threadgroup.add @cmd_receiver
|
@threadgroup.add @cmd_receiver
|
||||||
@threadgroup.add @receiver_watchdog
|
@threadgroup.add @receiver_watchdog
|
||||||
|
@ -634,24 +741,25 @@ class << MultiTkIp
|
||||||
alias __new new
|
alias __new new
|
||||||
private :__new
|
private :__new
|
||||||
|
|
||||||
def new_master(keys={}, &b)
|
|
||||||
|
def new_master(keys={})
|
||||||
ip = __new(__getip, nil, keys)
|
ip = __new(__getip, nil, keys)
|
||||||
ip.eval_proc(&b) if b
|
ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
|
||||||
ip
|
ip
|
||||||
end
|
end
|
||||||
|
|
||||||
alias new new_master
|
alias new new_master
|
||||||
|
|
||||||
def new_slave(keys={}, &b)
|
def new_slave(keys={})
|
||||||
ip = __new(__getip, false, keys)
|
ip = __new(__getip, false, keys)
|
||||||
ip.eval_proc(&b) if b
|
ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
|
||||||
ip
|
ip
|
||||||
end
|
end
|
||||||
alias new_trusted_slave new_slave
|
alias new_trusted_slave new_slave
|
||||||
|
|
||||||
def new_safe_slave(keys={},&b)
|
def new_safe_slave(keys={})
|
||||||
ip = __new(__getip, true, keys)
|
ip = __new(__getip, true, keys)
|
||||||
ip.eval_proc(&b) if b
|
ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given?
|
||||||
ip
|
ip
|
||||||
end
|
end
|
||||||
alias new_safeTk new_safe_slave
|
alias new_safeTk new_safe_slave
|
||||||
|
@ -857,12 +965,15 @@ class MultiTkIp
|
||||||
if cmd.kind_of?(String)
|
if cmd.kind_of?(String)
|
||||||
xcmd = cmd
|
xcmd = cmd
|
||||||
xargs = args
|
xargs = args
|
||||||
cmd = proc{ TkComm._get_eval_string(eval(xcmd, *xargs)) }
|
cmd = proc{
|
||||||
|
$SAFE=@safe_level[0]
|
||||||
|
TkComm._get_eval_string(eval(xcmd, *xargs))
|
||||||
|
}
|
||||||
args = []
|
args = []
|
||||||
end
|
end
|
||||||
|
|
||||||
# check
|
# check
|
||||||
unless cmd.kind_of?(Proc)
|
unless cmd.kind_of?(Proc) || cmd.kind_of?(Method)
|
||||||
raise RuntimeError, "A Proc object is expected for the 'cmd' argument"
|
raise RuntimeError, "A Proc object is expected for the 'cmd' argument"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -919,11 +1030,11 @@ class MultiTkIp
|
||||||
end
|
end
|
||||||
private :eval_proc_core
|
private :eval_proc_core
|
||||||
|
|
||||||
def eval_callback(cmd = Proc.new, *args)
|
def eval_callback(cmd = proc{$SAFE=@safe_level[0]; Proc.new}.call, *args)
|
||||||
eval_proc_core(false, cmd, *args)
|
eval_proc_core(false, cmd, *args)
|
||||||
end
|
end
|
||||||
|
|
||||||
def eval_proc(cmd = Proc.new, *args)
|
def eval_proc(cmd = proc{$SAFE=@safe_level[0]; Proc.new}.call, *args)
|
||||||
eval_proc_core(true, cmd, *args)
|
eval_proc_core(true, cmd, *args)
|
||||||
end
|
end
|
||||||
alias call eval_proc
|
alias call eval_proc
|
||||||
|
@ -931,7 +1042,7 @@ class MultiTkIp
|
||||||
end
|
end
|
||||||
class << MultiTkIp
|
class << MultiTkIp
|
||||||
# class method
|
# class method
|
||||||
def eval_proc(cmd = Proc.new, *args)
|
def eval_proc(cmd = proc{$SAFE=__getip.safe_level; Proc.new}.call, *args)
|
||||||
# class ==> interp object
|
# class ==> interp object
|
||||||
__getip.eval_proc(cmd, *args)
|
__getip.eval_proc(cmd, *args)
|
||||||
end
|
end
|
||||||
|
@ -994,6 +1105,10 @@ class << MultiTkIp
|
||||||
__getip.safe?
|
__getip.safe?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def exit(st = 0)
|
||||||
|
__getip.exit(st)
|
||||||
|
end
|
||||||
|
|
||||||
def restart(app_name = nil, keys = {})
|
def restart(app_name = nil, keys = {})
|
||||||
init_ip_internal
|
init_ip_internal
|
||||||
|
|
||||||
|
@ -1187,17 +1302,36 @@ class MultiTkIp
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete
|
def delete
|
||||||
|
@slave_ip_tbl.each_value{|subip|
|
||||||
|
unless subip.deleted?
|
||||||
|
begin
|
||||||
|
subip._invoke('destroy', '.')
|
||||||
|
rescue Exception
|
||||||
|
end
|
||||||
|
subip.delete
|
||||||
|
#subip._invoke('exit')
|
||||||
|
end
|
||||||
|
}
|
||||||
if safe?
|
if safe?
|
||||||
# do 'exit' to call the delete_hook procedure
|
# do 'exit' to call the delete_hook procedure
|
||||||
@interp._eval_without_enc('exit')
|
@interp._eval_without_enc('exit')
|
||||||
end
|
end
|
||||||
@interp.delete
|
@interp.delete unless @interp.deleted?
|
||||||
end
|
end
|
||||||
|
|
||||||
def deleted?
|
def deleted?
|
||||||
@interp.deleted?
|
@interp.deleted?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def exit(st = 0)
|
||||||
|
if master?
|
||||||
|
Kernel.exit(st)
|
||||||
|
else
|
||||||
|
delete
|
||||||
|
st
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def restart(app_name = nil, keys = {})
|
def restart(app_name = nil, keys = {})
|
||||||
_init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)
|
_init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS)
|
||||||
|
|
||||||
|
|
|
@ -17,15 +17,15 @@ module TkOptionDB
|
||||||
end
|
end
|
||||||
|
|
||||||
def add(pat, value, pri=None)
|
def add(pat, value, pri=None)
|
||||||
if $SAFE >= 4
|
# if $SAFE >= 4
|
||||||
fail SecurityError, "can't call 'TkOptionDB.add' at $SAFE >= 4"
|
# fail SecurityError, "can't call 'TkOptionDB.add' at $SAFE >= 4"
|
||||||
end
|
# end
|
||||||
tk_call('option', 'add', pat, value, pri)
|
tk_call('option', 'add', pat, value, pri)
|
||||||
end
|
end
|
||||||
def clear
|
def clear
|
||||||
if $SAFE >= 4
|
# if $SAFE >= 4
|
||||||
fail SecurityError, "can't call 'TkOptionDB.crear' at $SAFE >= 4"
|
# fail SecurityError, "can't call 'TkOptionDB.crear' at $SAFE >= 4"
|
||||||
end
|
# end
|
||||||
tk_call_without_enc('option', 'clear')
|
tk_call_without_enc('option', 'clear')
|
||||||
end
|
end
|
||||||
def get(win, name, klass)
|
def get(win, name, klass)
|
||||||
|
|
|
@ -722,7 +722,7 @@ class TkText<TkTextWin
|
||||||
|
|
||||||
def tag_remove(tag, *indices)
|
def tag_remove(tag, *indices)
|
||||||
tk_send_without_enc('tag', 'remove', _get_eval_enc_str(tag),
|
tk_send_without_enc('tag', 'remove', _get_eval_enc_str(tag),
|
||||||
*(indces.collect{|idx| _get_eval_enc_str(idx)}))
|
*(indices.collect{|idx| _get_eval_enc_str(idx)}))
|
||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -26,10 +26,29 @@ else
|
||||||
File.dirname(__FILE__)))
|
File.dirname(__FILE__)))
|
||||||
end
|
end
|
||||||
file = File.expand_path('tkoptdb.rb', File.dirname(__FILE__))
|
file = File.expand_path('tkoptdb.rb', File.dirname(__FILE__))
|
||||||
MultiTkIp.new_safeTk{
|
|
||||||
ent.each{|pat, val| TkOptionDB.add(pat, val)}
|
ip = MultiTkIp.new_safeTk{
|
||||||
|
# When a block is given to 'new_safeTk' method,
|
||||||
|
# the block is evaluated on $SAFE==4.
|
||||||
|
ent.each{|pat, val| Tk.tk_call('option', 'add', pat, val)}
|
||||||
|
}
|
||||||
|
|
||||||
|
=begin
|
||||||
|
ip.eval_proc{
|
||||||
|
# When a block is given to 'eval_proc' method,
|
||||||
|
# the block is evaluated on the IP's current safe level.
|
||||||
|
# So, the followings raises exceptions.
|
||||||
load file
|
load file
|
||||||
}
|
}
|
||||||
|
=end
|
||||||
|
|
||||||
|
ip.eval_proc(proc{
|
||||||
|
# When a Procedure object is given to 'eval_proc' method as an argument,
|
||||||
|
# the proc is evaluated on the proc's binding.
|
||||||
|
# So, the followings are evaluated on $SAFE==0
|
||||||
|
load file
|
||||||
|
})
|
||||||
|
|
||||||
# Tk.mainloop is ignored on the slave-IP
|
# Tk.mainloop is ignored on the slave-IP
|
||||||
|
|
||||||
Tk.mainloop
|
Tk.mainloop
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue