# File tk/lib/multi-tk.rb, line 799 def self.mainloop(check_root = true) begin TclTkLib.set_eventloop_window_mode(true) @interp_thread.value ensure TclTkLib.set_eventloop_window_mode(false) end end
Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
Ruby 1.9 !!!!!!!!!!!!!!!!!!!!!!!!!!
# File tk/lib/remote-tk.rb, line 19 def self._DEFAULT_MASTER # work only once if @flag @flag = nil @@DEFAULT_MASTER else nil end end
# File tk/lib/remote-tk.rb, line 15 def self._IP_TABLE; @@IP_TABLE; end
# File tk/lib/remote-tk.rb, line 16 def self._TK_TABLE_LIST; @@TK_TABLE_LIST; end
# File tk/lib/multi-tk.rb, line 1534 def self.__getip current = Thread.current if current.kind_of?(@@CALLBACK_SUBTHREAD) return current[:callback_ip] end if TclTkLib.mainloop_thread? != false && current[:callback_ip] return current[:callback_ip] end if current.group == ThreadGroup::Default @@DEFAULT_MASTER else ip = @@IP_TABLE[current.group] unless ip fail SecurityError, "cannot call Tk methods on #{Thread.current.inspect}" end ip end end
# File tk/lib/multi-tk.rb, line 956 def self.__init_ip_env__(table, script) ret = [] mtx = (Thread.current[:MultiTk_ip_Mutex] ||= Mutex.new) cond = (Thread.current[:MultiTk_ip_CondVar] ||= ConditionVariable.new) mtx.synchronize{ @init_ip_env_queue.enq([mtx, cond, ret, table, script]) cond.wait(mtx) } if ret[0].kind_of?(Exception) raise ret[0] else ret[0] end end
# File tk/lib/multi-tk.rb, line 845 def self.__pseudo_toplevel Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER && self.__pseudo_toplevel_evaluable? && @pseudo_toplevel[1] end
# File tk/lib/multi-tk.rb, line 851 def self.__pseudo_toplevel=(m) unless (Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER) fail SecurityError, "no permission to manipulate" end # if m.kind_of?(Module) && m.respond_to?(:pseudo_toplevel_evaluable?) if m.respond_to?(:pseudo_toplevel_evaluable?) @pseudo_toplevel[0] = true @pseudo_toplevel[1] = m else fail ArgumentError, 'fail to set pseudo-toplevel' end self end
# File tk/lib/multi-tk.rb, line 875 def self.__pseudo_toplevel_evaluable=(mode) unless (Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER) fail SecurityError, "no permission to manipulate" end @pseudo_toplevel[0] = (mode)? true: false end
# File tk/lib/multi-tk.rb, line 867 def self.__pseudo_toplevel_evaluable? begin @pseudo_toplevel[0] && @pseudo_toplevel[1].pseudo_toplevel_evaluable? rescue Exception false end end
# File tk/lib/multi-tk.rb, line 2683 def _conv_listelement(arg) __getip._conv_listelement(arg) end
# File tk/lib/multi-tk.rb, line 2687 def _create_console __getip._create_console end
# File tk/lib/multi-tk.rb, line 2591 def _eval(str) __getip._eval(str) end
# File tk/lib/multi-tk.rb, line 2607 def _eval_with_enc(str) __getip._eval_with_enc(str) end
# File tk/lib/multi-tk.rb, line 2599 def _eval_without_enc(str) __getip._eval_without_enc(str) end
# File tk/lib/multi-tk.rb, line 2619 def _fromUTF8(str, encoding=nil) __getip._fromUTF8(str, encoding) end
# File tk/lib/multi-tk.rb, line 2654 def _get_global_var(var) __getip._get_global_var(var) end
# File tk/lib/multi-tk.rb, line 2657 def _get_global_var2(var, idx) __getip._get_global_var2(var, idx) end
# File tk/lib/multi-tk.rb, line 2635 def _get_variable(var, flag) __getip._get_variable(var, flag) end
# File tk/lib/multi-tk.rb, line 2638 def _get_variable2(var, idx, flag) __getip._get_variable2(var, idx, flag) end
# File tk/lib/multi-tk.rb, line 2595 def _invoke(*args) __getip._invoke(*args) end
# File tk/lib/multi-tk.rb, line 2611 def _invoke_with_enc(*args) __getip._invoke_with_enc(*args) end
# File tk/lib/multi-tk.rb, line 2603 def _invoke_without_enc(*args) __getip._invoke_without_enc(*args) end
# File tk/lib/multi-tk.rb, line 1526 def self._ip_id_ __getip._ip_id_ end
# File tk/lib/multi-tk.rb, line 2680 def _merge_tklist(*args) __getip._merge_tklist(*args) end
# File tk/lib/multi-tk.rb, line 2142 def MultiTkIp._proc_on_current_safelevel(cmd=nil, &blk) MultiTkIp.__getip._proc_on_current_safelevel(cmd, &blk) end
# File tk/lib/multi-tk.rb, line 2133 def MultiTkIp._proc_on_safelevel(cmd=nil, &blk) MultiTkIp.__getip._proc_on_safelevel(cmd, &blk) end
# File tk/lib/multi-tk.rb, line 2631 def _return_value __getip._return_value end
# File tk/lib/multi-tk.rb, line 2660 def _set_global_var(var, value) __getip._set_global_var(var, value) end
# File tk/lib/multi-tk.rb, line 2663 def _set_global_var2(var, idx, value) __getip._set_global_var2(var, idx, value) end
# File tk/lib/multi-tk.rb, line 2641 def _set_variable(var, value, flag) __getip._set_variable(var, value, flag) end
# File tk/lib/multi-tk.rb, line 2644 def _set_variable2(var, idx, value, flag) __getip._set_variable2(var, idx, value, flag) end
# File tk/lib/multi-tk.rb, line 2677 def _split_tklist(str) __getip._split_tklist(str) end
# File tk/lib/multi-tk.rb, line 2627 def _thread_tkwait(mode, target) __getip._thread_tkwait(mode, target) end
# File tk/lib/multi-tk.rb, line 2623 def _thread_vwait(var) __getip._thread_vwait(var) end
# File tk/lib/multi-tk.rb, line 2615 def _toUTF8(str, encoding=nil) __getip._toUTF8(str, encoding) end
# File tk/lib/multi-tk.rb, line 2666 def _unset_global_var(var) __getip._unset_global_var(var) end
# File tk/lib/multi-tk.rb, line 2669 def _unset_global_var2(var, idx) __getip._unset_global_var2(var, idx) end
# File tk/lib/multi-tk.rb, line 2647 def _unset_variable(var, flag) __getip._unset_variable(var, flag) end
# File tk/lib/multi-tk.rb, line 2650 def _unset_variable2(var, idx, flag) __getip._unset_variable2(var, idx, flag) end
# File tk/lib/multi-tk.rb, line 2568 def abort(msg = nil) __getip.abort(msg) end
# File tk/lib/multi-tk.rb, line 1883 def self.add_tk_procs(name, args=nil, body=nil) if name.kind_of?(Array) # => an array of [name, args, body] name.each{|param| self.add_tk_procs(*param)} else name = name.to_s @@ADD_TK_PROCS << [name, args, body] @@IP_TABLE.each{|tg, ip| ip._add_tk_procs(name, args, body) } end end
# File tk/lib/multi-tk.rb, line 3202 def self.alias_delete(slave, cmd_name) __getip.alias_delete(slave, cmd_name) self end
# File tk/lib/multi-tk.rb, line 3193 def self.alias_info(slave, cmd_name) __getip.alias_info(slave, cmd_name) end
# File tk/lib/multi-tk.rb, line 3433 def self.alias_target(aliascmd, slave = '') __getip.alias_target(aliascmd, slave) end
# File tk/lib/multi-tk.rb, line 3222 def self.aliases(slave = '') __getip.aliases(slave) end
# File tk/lib/multi-tk.rb, line 1696 def self.alive? __getip.alive? end
# File tk/lib/multi-tk.rb, line 2548 def allow_ruby_exit= (mode) __getip.allow_ruby_exit = mode end
# File tk/lib/multi-tk.rb, line 2544 def allow_ruby_exit? __getip.allow_ruby_exit? end
# File tk/lib/multi-tk.rb, line 923 def self.assign_receiver_and_watchdog(target) ret = [nil] @assign_thread.raise(@assign_request.new(target, ret)) while ret[0] == nil unless @assign_thread.alive? raise RuntimeError, 'lost the thread to assign a receiver and a watchdog thread' end end if ret[0].kind_of?(Exception) raise ret[0] else ret[0] end end
# File tk/lib/multi-tk.rb, line 2469 def bg_eval(*args, &blk) # class ==> interp object __getip.bg_eval(*args, &blk) end
# File tk/lib/multi-tk.rb, line 2442 def bg_eval_proc(*args, &blk) # class ==> interp object __getip.bg_eval_proc(*args, &blk) end
# File tk/lib/multi-tk.rb, line 2457 def bg_eval_string(cmd, *eval_args) # class ==> interp object __getip.bg_eval_string(cmd, *eval_args) end
# File tk/lib/multi-tk.rb, line 3375 def self.bgerror(cmd = Proc.new, slave = nil, &b) __getip.bgerror(cmd, slave, &b) end
# File tk/lib/multi-tk.rb, line 1914 def self.cb_entry_class @@CB_ENTRY_CLASS end
# File tk/lib/tk.rb, line 1450 def INTERP.cb_eval(cmd, *args) TkUtil._get_eval_string(TkUtil.eval_cmd(cmd, *args)) end
# File tk/lib/multi-tk.rb, line 1826 def self.create_table if __getip.slave? begin raise SecurityError, "slave-IP has no permission creating a new table" rescue SecurityError => e #p e.backtrace # Is called on a Ruby/Tk library? caller_info = e.backtrace[1] if caller_info =~ %r{^#{MultiTkIp::BASE_DIR}/(tk|tkextlib)/[^:]+\.rb:} # Probably, caller is a Ruby/Tk library --> allow creating else raise e end end end id = @@TK_TABLE_LIST.size obj = Object.new @@TK_TABLE_LIST << obj obj.instance_variable_set(:@id, id) obj.instance_variable_set(:@mutex, Mutex.new) obj.instance_eval{ def self.mutex @mutex end def self.method_missing(m, *args) MultiTkIp.tk_object_table(@id).__send__(m, *args) end } obj.freeze @@IP_TABLE.each{|tg, ip| ip._add_new_tables } return obj end
# File tk/lib/multi-tk.rb, line 3213 def self.def_alias(slave, new_cmd, org_cmd, *args) ret = __getip.def_alias(slave, new_cmd, org_cmd, *args) (ret == new_cmd)? self: nil end
# File tk/lib/multi-tk.rb, line 3614 def default_encoding=(enc) __getip.default_encoding=(enc) end
# File tk/lib/multi-tk.rb, line 2480 def self.default_master? __getip == @@DEFAULT_MASTER end
# File tk/lib/multi-tk.rb, line 3252 def self.delete_cmd(slave, cmd) __getip.delete_cmd(slave, cmd) self end
# File tk/lib/multi-tk.rb, line 3232 def self.delete_slaves(*args) __getip.delete_slaves(*args) self end
# File tk/lib/multi-tk.rb, line 2556 def deleted? __getip.deleted? end
# File tk/lib/multi-tk.rb, line 2491 def do_one_event(flag = TclTkLib::EventFlag::ALL) __getip.do_one_event(flag) end
# File tk/lib/multi-tk.rb, line 3618 def encoding=(enc) __getip.encoding=(enc) end
# File tk/lib/multi-tk.rb, line 3632 def encoding_convertfrom(str, enc=None) __getip.encoding_convertfrom(str, enc) end
# File tk/lib/multi-tk.rb, line 3637 def encoding_convertto(str, enc=None) __getip.encoding_convertto(str, enc) end
# File tk/lib/multi-tk.rb, line 3622 def encoding_name __getip.encoding_name end
# File tk/lib/multi-tk.rb, line 3626 def encoding_obj __getip.encoding_obj end
# File tk/lib/multi-tk.rb, line 3602 def encoding_table __getip.encoding_table end
# File tk/lib/multi-tk.rb, line 2465 def eval(*args, &blk) # class ==> interp object __getip.eval(*args, &blk) end
class method
# File tk/lib/multi-tk.rb, line 2436 def eval_proc(*args, &blk) # class ==> interp object __getip.eval_proc(*args, &blk) end
# File tk/lib/multi-tk.rb, line 2451 def eval_string(cmd, *eval_args) # class ==> interp object __getip.eval_string(cmd, *eval_args) end
# File tk/lib/multi-tk.rb, line 3242 def self.exist?(slave = '') __getip.exist?(slave) end
# File tk/lib/multi-tk.rb, line 2572 def exit(st = true) __getip.exit(st) end
# File tk/lib/multi-tk.rb, line 2576 def exit!(st = false) __getip.exit!(st) end
# File tk/lib/multi-tk.rb, line 3266 def self.expose_cmd(slave, cmd, aliasname = nil) __getip.expose_cmd(slave, cmd, aliasname) self end
# File tk/lib/multi-tk.rb, line 3606 def force_default_encoding=(mode) __getip.force_default_encoding=(mode) end
# File tk/lib/multi-tk.rb, line 3610 def force_default_encoding? __getip.force_default_encoding? end
# File tk/lib/multi-tk.rb, line 1917 def self.get_cb_entry(cmd) @@CB_ENTRY_CLASS.new(__getip, cmd).freeze end
# File tk/lib/multi-tk.rb, line 2505 def get_eventloop_tick __getip.get_eventloop_tick end
# File tk/lib/multi-tk.rb, line 2517 def get_eventloop_weight __getip.get_eventloop_weight end
# File tk/lib/multi-tk.rb, line 3416 def self.get_limit(limit_type, slave = '', slot = nil) __getip.get_limit(limit_type, slave, slot) end
# File tk/lib/multi-tk.rb, line 2511 def get_no_event_wait __getip.get_no_event_wait end
# File tk/lib/multi-tk.rb, line 2560 def has_mainwindow? __getip.has_mainwindow? end
# File tk/lib/multi-tk.rb, line 3280 def self.hide_cmd(slave, cmd, aliasname = nil) __getip.hide_cmd(slave, cmd, aliasname) self end
# File tk/lib/multi-tk.rb, line 982 def self.inherited(subclass) # trust if on ThreadGroup::Default or @@DEFAULT_MASTER's ThreadGroup if @@IP_TABLE[Thread.current.group] == @@DEFAULT_MASTER begin class << subclass self.methods.each{|m| name = m.to_s begin unless name == '__id__' || name == '__send__' || name == 'freeze' undef_method(m) end rescue Exception # ignore all exceptions end } end ensure subclass.freeze fail SecurityError, "cannot create subclass of MultiTkIp on a untrusted ThreadGroup" end end end
# File tk/lib/multi-tk.rb, line 1860 def self.init_ip_env(script = Proc.new) @@INIT_IP_ENV << script if __getip.slave? begin raise SecurityError, "slave-IP has no permission initializing IP env" rescue SecurityError => e #p e.backtrace # Is called on a Ruby/Tk library? caller_info = e.backtrace[1] if caller_info =~ %r{^#{MultiTkIp::BASE_DIR}/(tk|tkextlib)/[^:]+\.rb:} # Probably, caller is a Ruby/Tk library --> allow creating else raise e end end end # @@IP_TABLE.each{|tg, ip| # ip._init_ip_env(script) # } @@DEFAULT_MASTER.__init_ip_env__(@@IP_TABLE, script) end
# File tk/lib/multi-tk.rb, line 1907 def self.init_ip_internal __getip._init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS) end
# File tk/lib/multi-tk.rb, line 2564 def invalid_namespace? __getip.invalid_namespace? end
# File tk/lib/multi-tk.rb, line 1709 def self.ip_name __getip.ip_name end
# File tk/lib/multi-tk.rb, line 799 def self.mainloop(check_root = true) begin TclTkLib.set_eventloop_window_mode(true) @interp_thread.value ensure TclTkLib.set_eventloop_window_mode(false) end end
# File tk/lib/multi-tk.rb, line 2494 def mainloop_abort_on_exception # __getip.mainloop_abort_on_exception TclTkLib.mainloop_abort_on_exception end
# File tk/lib/multi-tk.rb, line 2498 def mainloop_abort_on_exception=(mode) # __getip.mainloop_abort_on_exception=(mode) TclTkLib.mainloop_abort_on_exception=(mode) end
# File tk/lib/multi-tk.rb, line 2488 def mainloop_watchdog(check_root = true) __getip.mainloop_watchdog(check_root) end
# File tk/lib/multi-tk.rb, line 2528 def make_safe __getip.make_safe end
# File tk/lib/multi-tk.rb, line 1740 def self.manipulable? true end
# File tk/lib/multi-tk.rb, line 3357 def self.mark_trusted(slave = '') __getip.mark_trusted(slave) self end
# File tk/lib/multi-tk.rb, line 1674 def self.master? __getip.master? end
# File tk/lib/multi-tk.rb, line 1851 def self.method_missing(m, *args) MultiTkIp.tk_object_table(@id).__send__(m, *args) end
# File tk/lib/multi-tk.rb, line 187 def initialize(ip, cmd) @ip = ip @safe = safe = $SAFE # @cmd = cmd cmd = MultiTkIp._proc_on_safelevel(&cmd) @cmd = proc{|*args| cmd.call(safe, *args)} self.freeze end
# File tk/lib/multi-tk.rb, line 887 def self.new(target, ret) obj = super() obj.target = target obj.ret = ret obj end
# File tk/lib/multi-tk.rb, line 1561 def new_master(safe=nil, keys={}, &blk) if MultiTkIp::WITH_RUBY_VM #### TODO !!!!!! fail RuntimeError, 'sorry, still not support multiple master-interpreters on RubyVM' end if safe.kind_of?(Hash) keys = safe elsif safe.kind_of?(Integer) raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash) if !keys.key?(:safe) && !keys.key?('safe') keys[:safe] = safe end elsif safe == nil # do nothing else raise ArgumentError, "unexpected argument(s)" end ip = __new(__getip, nil, keys) #ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given? if block_given? #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)} #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; yield}.call)} ip._proc_on_safelevel(&blk).call(ip.safe_level) end ip end
# File tk/lib/multi-tk.rb, line 1618 def new_safe_slave(safe=4, keys={}, &blk) if safe.kind_of?(Hash) keys = safe elsif safe.kind_of?(Integer) raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash) if !keys.key?(:safe) && !keys.key?('safe') keys[:safe] = safe end else raise ArgumentError, "unexpected argument(s)" end ip = __new(__getip, true, keys) # ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given? if block_given? #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)} #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; yield}.call)} ip._proc_on_safelevel(&blk).call(ip.safe_level) end ip end
# File tk/lib/multi-tk.rb, line 1593 def new_slave(safe=nil, keys={}, &blk) if safe.kind_of?(Hash) keys = safe elsif safe.kind_of?(Integer) raise ArgumentError, "unexpected argument(s)" unless keys.kind_of?(Hash) if !keys.key?(:safe) && !keys.key?('safe') keys[:safe] = safe end elsif safe == nil # do nothing else raise ArgumentError, "unexpected argument(s)" end ip = __new(__getip, false, keys) # ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call) if block_given? if block_given? #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; Proc.new}.call)} #Thread.new{ip.eval_proc(proc{$SAFE=ip.safe_level; yield}.call)} ip._proc_on_safelevel(&blk).call(ip.safe_level) end ip end
# File tk/lib/multi-tk.rb, line 3425 def self.recursion_limit(slave = '', limit = None) __getip.recursion_limit(slave) end
# File tk/lib/multi-tk.rb, line 1895 def self.remove_tk_procs(*names) names.each{|name| name = name.to_s @@ADD_TK_PROCS.delete_if{|elem| elem.kind_of?(Array) && elem[0].to_s == name } } @@IP_TABLE.each{|tg, ip| ip._remove_tk_procs(*names) } end
# File tk/lib/multi-tk.rb, line 2580 def restart(app_name = nil, keys = {}) init_ip_internal __getip._invoke('set', 'argv0', app_name) if app_name if keys.kind_of?(Hash) __getip._invoke('set', 'argv', _keys2opts(keys)) end __getip.restart end
# File tk/lib/multi-tk.rb, line 2536 def safe_base? begin __getip.safe_base? rescue false end end
# File tk/lib/multi-tk.rb, line 335 def self.safe_level __getip.safe_level end
# File tk/lib/multi-tk.rb, line 329 def self.safe_level=(safe) self.set_safe_level(safe) end
# File tk/lib/multi-tk.rb, line 2502 def set_eventloop_tick(tick) __getip.set_eventloop_tick(tick) end
# File tk/lib/multi-tk.rb, line 2514 def set_eventloop_weight(loop_max, no_event_tick) __getip.set_eventloop_weight(loop_max, no_event_tick) end
# File tk/lib/multi-tk.rb, line 3391 def self.set_limit(limit_type, slave = '', opts = {}) __getip.set_limit(limit_type, slave, opts) end
# File tk/lib/multi-tk.rb, line 2508 def set_no_event_wait(tick) __getip.set_no_event_wait(tick) end
# File tk/lib/multi-tk.rb, line 326 def self.set_safe_level(safe) __getip.set_safe_level(safe) end
# File tk/lib/multi-tk.rb, line 1681 def self.slave? not self.master? end
# File tk/lib/multi-tk.rb, line 1731 def self.slaves(all = false) __getip.slaves(all) end
# File tk/lib/multi-tk.rb, line 1817 def self.tk_cmd_tbl @@TK_CMD_TBL end
# File tk/lib/multi-tk.rb, line 1823 def self.tk_object_table(id) __getip._tk_table_list[id] end
# File tk/lib/multi-tk.rb, line 1820 def self.tk_windows __getip._tk_windows end
# File tk/lib/multi-tk.rb, line 1715 def self.to_eval __getip.to_eval end
# File tk/lib/multi-tk.rb, line 3492 def self.transfer_stderr(dist, src = '') __getip.transfer_stderr(dist, src) self end
# File tk/lib/multi-tk.rb, line 3472 def self.transfer_stdin(dist, src = '') __getip.transfer_stdin(dist, src) self end
# File tk/lib/multi-tk.rb, line 1189 def __create_safe_slave_obj(safe_opts, app_name, tk_opts) raise SecurityError, "no permission to manipulate" unless self.manipulable? # safe interpreter ip_name = _create_slave_ip_name slave_ip = @interp.create_slave(ip_name, true) slave_ip.instance_eval{ @force_default_encoding ||= TkUtil.untrust([false]) @encoding ||= TkUtil.untrust([nil]) def @encoding.to_s; self.join(nil); end } @slave_ip_tbl[ip_name] = slave_ip def slave_ip.safe_base? true end @interp._eval("::safe::interpInit #{ip_name}") slave_ip._invoke('set', 'argv0', app_name) if app_name.kind_of?(String) if tk_opts tk_opts = __check_safetk_optkeys(tk_opts) if tk_opts.key?('use') @slave_ip_top[ip_name] = '' else tk_opts, top_path = __create_safetk_frame(slave_ip, ip_name, app_name, tk_opts) @slave_ip_top[ip_name] = top_path end @interp._eval("::safe::loadTk #{ip_name} #{_keys2opts(tk_opts)}") @interp._invoke('__replace_slave_tk_commands__', ip_name) else @slave_ip_top[ip_name] = nil end if safe_opts.key?('deleteHook') || safe_opts.key?(:deleteHook) @interp._eval("::safe::interpConfigure #{ip_name} " + _keys2opts(safe_opts)) else @interp._eval("::safe::interpConfigure #{ip_name} " + _keys2opts(safe_opts) + '-deleteHook {' + TkComm._get_eval_string(proc{|slave| self._default_delete_hook(slave) }) + '}') end [slave_ip, ip_name] end
# File tk/lib/multi-tk.rb, line 1238 def __create_trusted_slave_obj(name, keys) raise SecurityError, "no permission to manipulate" unless self.manipulable? ip_name = _create_slave_ip_name slave_ip = @interp.create_slave(ip_name, false) slave_ip.instance_eval{ @force_default_encoding ||= TkUtil.untrust([false]) @encoding ||= TkUtil.untrust([nil]) def @encoding.to_s; self.join(nil); end } slave_ip._invoke('set', 'argv0', name) if name.kind_of?(String) slave_ip._invoke('set', 'argv', _keys2opts(keys)) @interp._invoke('load', '', 'Tk', ip_name) @interp._invoke('__replace_slave_tk_commands__', ip_name) @slave_ip_tbl[ip_name] = slave_ip [slave_ip, ip_name] end
# File tk/lib/multi-tk.rb, line 3009 def __eval(str) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.__eval(str) end
# File tk/lib/multi-tk.rb, line 3014 def __invoke(*args) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.__invoke(*args) end
instance method
# File tk/lib/multi-tk.rb, line 2002 def __pseudo_toplevel ip = MultiTkIp.__getip (ip == @@DEFAULT_MASTER || ip == self) && self.__pseudo_toplevel_evaluable? && @pseudo_toplevel[1] end
# File tk/lib/multi-tk.rb, line 2008 def __pseudo_toplevel=(m) unless (Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER) fail SecurityError, "no permission to manipulate" end # if m.kind_of?(Module) && m.respond_to?(:pseudo_toplevel_evaluable?) if m.respond_to?(:pseudo_toplevel_evaluable?) @pseudo_toplevel[0] = true @pseudo_toplevel[1] = m else fail ArgumentError, 'fail to set pseudo-toplevel' end self end
# File tk/lib/multi-tk.rb, line 2032 def __pseudo_toplevel_evaluable=(mode) unless (Thread.current.group == ThreadGroup::Default && MultiTkIp.__getip == @@DEFAULT_MASTER) fail SecurityError, "no permission to manipulate" end @pseudo_toplevel[0] = (mode)? true: false end
# File tk/lib/multi-tk.rb, line 2024 def __pseudo_toplevel_evaluable? begin @pseudo_toplevel[0] && @pseudo_toplevel[1].pseudo_toplevel_evaluable? rescue Exception false end end
# File tk/lib/multi-tk.rb, line 1767 def _add_new_tables (@@TK_TABLE_LIST.size - @tk_table_list.size).times{ @tk_table_list << TkUtil.untrust({}) } end
# File tk/lib/multi-tk.rb, line 1777 def _add_tk_procs(name, args, body) return if slave? @interp._invoke('proc', name, args, body) if args && body @interp._invoke('interp', 'slaves').split.each{|slave| @interp._invoke('interp', 'alias', slave, name, '', name) } end
# File tk/lib/multi-tk.rb, line 3137 def _conv_listelement(arg) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._conv_listelement(arg) end
# File tk/lib/multi-tk.rb, line 1258 def _create_slave_object(keys={}) raise SecurityError, "no permission to manipulate" unless self.manipulable? ip = MultiTkIp.new_slave(self, keys={}) @slave_ip_tbl[ip.name] = ip end
# File tk/lib/multi-tk.rb, line 1483 def _default_delete_hook(slave) raise SecurityError, "no permission to manipulate" unless self.manipulable? @slave_ip_tbl.delete(slave) top = @slave_ip_top.delete(slave) if top.kind_of?(String) # call default hook of safetk.tcl (ignore exceptions) if top == '' begin @interp._eval("::safe::disallowTk #{slave}") rescue warn("Waring: fail to call '::safe::disallowTk'") if $DEBUG end else # toplevel path begin @interp._eval("::safe::tkDelete {} #{top} #{slave}") rescue warn("Waring: fail to call '::safe::tkDelete'") if $DEBUG begin @interp._eval("destroy #{top}") rescue warn("Waring: fail to destroy toplevel") if $DEBUG end end end end end
# File tk/lib/multi-tk.rb, line 350 def _destroy_slaves_of_slaveIP(ip) unless ip.deleted? # ip._split_tklist(ip._invoke('interp', 'slaves')).each{|name| ip._split_tklist(ip._invoke_without_enc('interp', 'slaves')).each{|name| name = _fromUTF8(name) begin # ip._eval_without_enc("#{name} eval {foreach i [after info] {after cancel $i}}") after_ids = ip._eval_without_enc("#{name} eval {after info}") ip._eval_without_enc("#{name} eval {foreach i {#{after_ids}} {after cancel $i}}") rescue Exception end begin # ip._invoke('interp', 'eval', name, 'destroy', '.') ip._invoke(name, 'eval', 'destroy', '.') rescue Exception end # safe_base? if ip._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0' begin ip._eval_without_enc("::safe::interpDelete #{name}") rescue Exception end end if ip._invoke('interp', 'exists', name) == '1' begin ip._invoke(name, 'eval', 'exit') rescue Exception end end unless ip.deleted? if ip._invoke('interp', 'exists', name) == '1' begin ip._invoke('interp', 'delete', name) rescue Exception end end end } end end
# File tk/lib/multi-tk.rb, line 3019 def _eval(str) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._eval(str) end
# File tk/lib/multi-tk.rb, line 3039 def _eval_with_enc(str) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._eval_with_enc(str) end
# File tk/lib/multi-tk.rb, line 3029 def _eval_without_enc(str) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._eval_without_enc(str) end
# File tk/lib/multi-tk.rb, line 3054 def _fromUTF8(str, encoding=nil) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._fromUTF8(str, encoding) end
# File tk/lib/multi-tk.rb, line 3099 def _get_global_var(var) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._get_global_var(var) end
# File tk/lib/multi-tk.rb, line 3103 def _get_global_var2(var, idx) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._get_global_var2(var, idx) end
# File tk/lib/multi-tk.rb, line 3074 def _get_variable(var, flag) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._get_variable(var, flag) end
# File tk/lib/multi-tk.rb, line 3078 def _get_variable2(var, idx, flag) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._get_variable2(var, idx, flag) end
# File tk/lib/multi-tk.rb, line 1773 def _init_ip_env(script) self.eval_proc{script.call(self)} end
# File tk/lib/multi-tk.rb, line 1801 def _init_ip_internal(init_ip_env, add_tk_procs) #init_ip_env.each{|script| self.eval_proc{script.call(self)}} init_ip_env.each{|script| self._init_ip_env(script)} add_tk_procs.each{|name, args, body| if master? @interp._invoke('proc', name, args, body) if args && body else @set_alias_proc.call(name) end } end
# File tk/lib/multi-tk.rb, line 3024 def _invoke(*args) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke(*args) end
# File tk/lib/multi-tk.rb, line 3044 def _invoke_with_enc(*args) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke_with_enc(*args) end
# File tk/lib/multi-tk.rb, line 3034 def _invoke_without_enc(*args) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke_without_enc(*args) end
# File tk/lib/multi-tk.rb, line 1529 def _ip_id_ # for RemoteTkIp '' end
# File tk/lib/multi-tk.rb, line 3133 def _merge_tklist(*args) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._merge_tklist(*args) end
# File tk/lib/multi-tk.rb, line 2137 def _proc_on_current_safelevel(cmd=nil, &blk) # require a block for eval safe = $SAFE cmd = _proc_on_safelevel(cmd, &blk) Proc.new{|*args| cmd.call(safe, *args)} end
instance & class method
# File tk/lib/multi-tk.rb, line 2106 def _proc_on_safelevel(cmd=nil, &blk) # require a block for eval if cmd if cmd.kind_of?(Method) _proc_on_safelevel{|*args| cmd.call(*args)} else _proc_on_safelevel(&cmd) end else #Proc.new{|safe, *args| $SAFE=safe if $SAFE < safe; yield(*args)} Proc.new{|safe, *args| # avoid security error on Exception objects untrust_proc = proc{|err| begin err.untrust if err.respond_to?(:untrust) rescue SecurityError end err } $SAFE=safe if $SAFE < safe; begin yield(*args) rescue Exception => e fail untrust_proc.call(e) end } end end
# File tk/lib/multi-tk.rb, line 600 def _receiver_mainloop(check_root) if @evloop_thread[0] && @evloop_thread[0].alive? @evloop_thread[0] else @evloop_thread[0] = Thread.new{ while !@interp.deleted? #if check_root # inf = @interp._invoke_without_enc('info', 'command', '.') # break if !inf.kind_of?(String) || inf != '.' #end break if check_root && !@interp.has_mainwindow? sleep 0.5 end } @evloop_thread[0] end end
# File tk/lib/multi-tk.rb, line 1785 def _remove_tk_procs(*names) return if slave? names.each{|name| name = name.to_s return if @interp.deleted? @interp._invoke('rename', name, '') return if @interp.deleted? @interp._invoke('interp', 'slaves').split.each{|slave| return if @interp.deleted? @interp._invoke('interp', 'alias', slave, name, '') rescue nil } } end
# File tk/lib/multi-tk.rb, line 3069 def _return_value raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._return_value end
# File tk/lib/multi-tk.rb, line 3107 def _set_global_var(var, value) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._set_global_var(var, value) end
# File tk/lib/multi-tk.rb, line 3111 def _set_global_var2(var, idx, value) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._set_global_var2(var, idx, value) end
# File tk/lib/multi-tk.rb, line 3082 def _set_variable(var, value, flag) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._set_variable(var, value, flag) end
# File tk/lib/multi-tk.rb, line 3086 def _set_variable2(var, idx, value, flag) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._set_variable2(var, idx, value, flag) end
# File tk/lib/multi-tk.rb, line 3129 def _split_tklist(str) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._split_tklist(str) end
# File tk/lib/multi-tk.rb, line 3064 def _thread_tkwait(mode, target) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._thread_tkwait(mode, target) end
# File tk/lib/multi-tk.rb, line 3059 def _thread_vwait(var) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._thread_vwait(var) end
# File tk/lib/multi-tk.rb, line 1753 def _tk_cmd_tbl tbl = {} MultiTkIp.tk_cmd_tbl.each{|id, ent| tbl[id] = ent if ent.ip == self } tbl end
# File tk/lib/multi-tk.rb, line 1763 def _tk_table_list @tk_table_list end
# File tk/lib/multi-tk.rb, line 1759 def _tk_windows @tk_windows end
# File tk/lib/multi-tk.rb, line 3049 def _toUTF8(str, encoding=nil) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._toUTF8(str, encoding) end
# File tk/lib/multi-tk.rb, line 3115 def _unset_global_var(var) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._unset_global_var(var) end
# File tk/lib/multi-tk.rb, line 3119 def _unset_global_var2(var, idx) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._unset_global_var2(var, idx) end
# File tk/lib/multi-tk.rb, line 3090 def _unset_variable(var, flag) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._unset_variable(var, flag) end
# File tk/lib/multi-tk.rb, line 3094 def _unset_variable2(var, idx, flag) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._unset_variable2(var, idx, flag) end
# File tk/lib/multi-tk.rb, line 2961 def abort(msg = nil) raise SecurityError, "no permission to manipulate" unless self.manipulable? if master? && !safe? && allow_ruby_exit? if msg Kernel.abort(msg) else Kernel.abort end else # ignore msg delete 1 end end
# File tk/lib/multi-tk.rb, line 3197 def alias_delete(slave, cmd_name) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'alias', _slavearg(slave), cmd_name, '') self end
# File tk/lib/multi-tk.rb, line 3189 def alias_info(slave, cmd_name) raise SecurityError, "no permission to manipulate" unless self.manipulable? _lst2ary(@interp._invoke('interp', 'alias', _slavearg(slave), cmd_name)) end
# File tk/lib/multi-tk.rb, line 3429 def alias_target(aliascmd, slave = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'target', _slavearg(slave), aliascmd) end
# File tk/lib/multi-tk.rb, line 3218 def aliases(slave = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? _lst2ary(@interp._invoke('interp', 'aliases', _slavearg(slave))) end
# File tk/lib/multi-tk.rb, line 1685 def alive? raise SecurityError, "no permission to manipulate" unless self.manipulable? begin return false unless @cmd_receiver.alive? return false if @interp.deleted? return false if @interp._invoke('interp', 'exists', '') == '0' rescue Exception return false end true end
# File tk/lib/multi-tk.rb, line 2878 def allow_ruby_exit= (mode) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.allow_ruby_exit = mode end
# File tk/lib/multi-tk.rb, line 2873 def allow_ruby_exit? raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.allow_ruby_exit? end
# File tk/lib/multi-tk.rb, line 2418 def bg_eval(*args, &blk) if block_given? bg_eval_proc(*args, &blk) elsif args[0] if args[0].respond_to?(:call) bg_eval_proc(*args) else bg_eval_string(*args) end else fail ArgumentError, "no argument to eval" end end
# File tk/lib/multi-tk.rb, line 2348 def bg_eval_proc(*args) if block_given? cmd = Proc.new else unless (cmd = args.shift) fail ArgumentError, "A Proc or Method object is expected for 1st argument" end end Thread.new{ eval_proc(cmd, *args) eval_proc_core(false, proc{|safe, *params| $SAFE=safe if $SAFE < safe Thread.new(*params, &cmd).value }, safe_level, *args) } end
# File tk/lib/multi-tk.rb, line 2387 def bg_eval_string(cmd, *eval_args) # cmd string ==> proc unless cmd.kind_of?(String) raise RuntimeError, "A String object is expected for the 'cmd' argument" end Thread.new{ eval_proc_core(true, proc{|safe| Kernel.eval("$SAFE=#{safe} if $SAFE < #{safe};" << cmd, *eval_args) }) } end
def #eval_proc(*args)
# The scope of the eval-block of 'eval_proc' method is different from # the external. If you want to pass local values to the eval-block, # use arguments of eval_proc method. They are passed to block-arguments. if block_given? cmd = Proc.new else unless (cmd = args.shift) fail ArgumentError, "A Proc or Method object is expected for 1st argument" end end if TclTkLib.mainloop_thread? == true # call from eventloop current = Thread.current backup_ip = current[:callback_ip] current[:callback_ip] = self begin eval_proc_core(false, proc{|safe, *params| $SAFE=safe if $SAFE < safe cmd.call(*params) }, *args) ensure current[:callback_ip] = backup_ip end else eval_proc_core(true, proc{|safe, *params| $SAFE=safe if $SAFE < safe Thread.new(*params, &cmd).value }, *args) end
end
# File tk/lib/multi-tk.rb, line 199 def call(*args) unless @ip.deleted? current = Thread.current backup_ip = current[:callback_ip] current[:callback_ip] = @ip begin ret = @ip.cb_eval(@cmd, *args) fail ret if ret.kind_of?(Exception) ret rescue TkCallbackBreak, TkCallbackContinue => e fail e rescue SecurityError => e # in 'exit', 'exit!', and 'abort' : security error --> delete IP if e.backtrace[0] =~ /^(.+?):(\d+):in `(exit|exit!|abort)'/ @ip.delete elsif @ip.safe? if @ip.respond_to?(:cb_error) @ip.cb_error(e) else nil # ignore end else fail e end rescue Exception => e fail e if e.message =~ /^TkCallback/ if @ip.safe? if @ip.respond_to?(:cb_error) @ip.cb_error(e) else nil # ignore end else fail e end ensure current[:callback_ip] = backup_ip end end end
# File tk/lib/multi-tk.rb, line 308 def cb_error(e) if @cb_error_proc[0].respond_to?(:call) @cb_error_proc[0].call(e) end end
def #cb_eval(cmd, *args)
#self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) } #ret = self.eval_callback{ TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *args)) } ret = self.eval_callback(*args){|safe, *params| $SAFE=safe if $SAFE < safe TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params)) } if ret.kind_of?(Exception) raise ret end ret
end
# File tk/lib/multi-tk.rb, line 1935 def cb_eval(cmd, *args) self.eval_callback(*args, &_proc_on_safelevel{|*params| TkComm._get_eval_string(TkUtil.eval_cmd(cmd, *params)) }) end
# File tk/lib/multi-tk.rb, line 3207 def def_alias(slave, new_cmd, org_cmd, *args) raise SecurityError, "no permission to manipulate" unless self.manipulable? ret = @interp._invoke('interp', 'alias', _slavearg(slave), new_cmd, '', org_cmd, *args) (ret == new_cmd)? self: nil end
# File tk/lib/multi-tk.rb, line 3656 def default_encoding=(enc) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.default_encoding = enc end
# File tk/lib/multi-tk.rb, line 2883 def delete raise SecurityError, "no permission to manipulate" unless self.manipulable? @slave_ip_tbl.each{|name, subip| _destroy_slaves_of_slaveIP(subip) begin subip._invoke('destroy', '.') unless subip.deleted? rescue Exception end begin # subip._eval_without_enc("foreach i [after info] {after cancel $i}") unless subip.deleted? after_ids = subip._eval_without_enc("after info") subip._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}") end rescue Exception end # safe_base? if @interp._eval_without_enc("catch {::safe::interpConfigure #{name}}") == '0' begin @interp._eval_without_enc("::safe::interpDelete #{name}") rescue Exception else next if subip.deleted? end end if subip.respond_to?(:safe_base?) && subip.safe_base? && !subip.deleted? # do 'exit' to call the delete_hook procedure begin subip._eval_without_enc('exit') rescue Exception end else begin subip.delete unless subip.deleted? rescue Exception end end } begin # @interp._eval_without_enc("foreach i [after info] {after cancel $i}") after_ids = @interp._eval_without_enc("after info") @interp._eval_without_enc("foreach i {#{after_ids}} {after cancel $i}") rescue Exception end begin @interp._invoke('destroy', '.') unless @interp.deleted? rescue Exception end if @safe_base && !@interp.deleted? # do 'exit' to call the delete_hook procedure @interp._eval_without_enc('exit') end @interp.delete self end
# File tk/lib/multi-tk.rb, line 3246 def delete_cmd(slave, cmd) raise SecurityError, "no permission to manipulate" unless self.manipulable? slave_invoke = @interp._invoke('list', 'rename', cmd, '') @interp._invoke('interp', 'eval', _slavearg(slave), slave_invoke) self end
# File tk/lib/multi-tk.rb, line 3226 def delete_slaves(*args) raise SecurityError, "no permission to manipulate" unless self.manipulable? slaves = args.collect{|s| _slavearg(s)} @interp._invoke('interp', 'delete', *slaves) if slaves.size > 0 self end
# File tk/lib/multi-tk.rb, line 2946 def deleted? raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.deleted? end
# File tk/lib/multi-tk.rb, line 3661 def encoding=(enc) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.encoding = enc end
# File tk/lib/multi-tk.rb, line 3676 def encoding_convertfrom(str, enc=None) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.encoding_convertfrom(str, enc) end
# File tk/lib/multi-tk.rb, line 3682 def encoding_convertto(str, enc=None) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.encoding_convertto(str, enc) end
# File tk/lib/multi-tk.rb, line 3665 def encoding_name raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.encoding_name end
# File tk/lib/multi-tk.rb, line 3669 def encoding_obj raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.encoding_obj end
# File tk/lib/multi-tk.rb, line 3643 def encoding_table @interp.encoding_table end
# File tk/lib/multi-tk.rb, line 2404 def eval(*args, &blk) if block_given? eval_proc(*args, &blk) elsif args[0] if args[0].respond_to?(:call) eval_proc(*args) else eval_string(*args) end else fail ArgumentError, "no argument to eval" end end
Not stable, so disable this feature
# File tk/lib/multi-tk.rb, line 2242 def eval_callback(*args) if block_given? cmd = Proc.new else cmd = args.shift end begin if @@CALLBACK_SUBTHREAD.table[self].index(Thread.current) last_th = nil else last_th = @@CALLBACK_SUBTHREAD.table[self][-1] end @@CALLBACK_SUBTHREAD.new(self){ @@CALLBACK_SUBTHREAD.table[self] << Thread.current begin last_th.join if last_th eval_proc_core(false, cmd, *args) rescue Exception=>e e ensure @@CALLBACK_SUBTHREAD.table[self].delete(Thread.current) end } end end
# File tk/lib/multi-tk.rb, line 2283 def eval_proc(*args, &blk) if block_given? cmd = _proc_on_safelevel(&blk) else unless (cmd = args.shift) fail ArgumentError, "A Proc or Method object is expected for 1st argument" end cmd = _proc_on_safelevel(&cmd) end if TclTkLib.mainloop_thread? == true # call from eventloop current = Thread.current backup_ip = current[:callback_ip] current[:callback_ip] = self begin eval_proc_core(false, cmd, *args) ensure current[:callback_ip] = backup_ip end else eval_proc_core(true, proc{|safe, *params| Thread.new{cmd.call(safe, *params)}.value }, *args) end end
# File tk/lib/multi-tk.rb, line 2373 def eval_string(cmd, *eval_args) # cmd string ==> proc unless cmd.kind_of?(String) raise RuntimeError, "A String object is expected for the 'cmd' argument" end eval_proc_core(true, proc{|safe| Kernel.eval("$SAFE=#{safe} if $SAFE < #{safe};" << cmd, *eval_args) }) end
# File tk/lib/multi-tk.rb, line 3237 def exist?(slave = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? ret = @interp._invoke('interp', 'exists', _slavearg(slave)) (ret == '1')? true: false end
# File tk/lib/multi-tk.rb, line 2976 def exit(st = true) raise SecurityError, "no permission to manipulate" unless self.manipulable? if master? && !safe? && allow_ruby_exit? Kernel.exit(st) else delete st end end
# File tk/lib/multi-tk.rb, line 2986 def exit!(st = false) raise SecurityError, "no permission to manipulate" unless self.manipulable? if master? && !safe? && allow_ruby_exit? Kernel.exit!(st) else delete st end end
# File tk/lib/multi-tk.rb, line 3257 def expose_cmd(slave, cmd, aliasname = nil) raise SecurityError, "no permission to manipulate" unless self.manipulable? if aliasname @interp._invoke('interp', 'expose', _slavearg(slave), cmd, aliasname) else @interp._invoke('interp', 'expose', _slavearg(slave), cmd) end self end
# File tk/lib/multi-tk.rb, line 3647 def force_default_encoding=(mode) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.force_default_encoding = mode end
# File tk/lib/multi-tk.rb, line 3651 def force_default_encoding? raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.force_default_encoding? end
# File tk/lib/multi-tk.rb, line 3379 def get_bgerror_handler(slave = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? procedure(@interp._invoke('interp', 'bgerror', _slavearg(slave))) end
# File tk/lib/multi-tk.rb, line 3395 def get_limit(limit_type, slave = '', slot = nil) raise SecurityError, "no permission to manipulate" unless self.manipulable? if slot num_or_str(@interp._invoke('interp', 'limit', _slavearg(slave), limit_type, slot)) else l = @interp._split_tklist(@interp._invoke_without_enc('interp', 'limit', _slavearg(slave), limit_type)) l.map!{|s| _fromUTF8(s)} r = {} until l.empty? key = l.shift[1..-1] val = l.shift val = num_or_str(val) if val r[key] = val end r end end
# File tk/lib/multi-tk.rb, line 2951 def has_mainwindow? raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.has_mainwindow? end
# File tk/lib/multi-tk.rb, line 3271 def hide_cmd(slave, cmd, aliasname = nil) raise SecurityError, "no permission to manipulate" unless self.manipulable? if aliasname @interp._invoke('interp', 'hide', _slavearg(slave), cmd, aliasname) else @interp._invoke('interp', 'hide', _slavearg(slave), cmd) end self end
# File tk/lib/multi-tk.rb, line 2956 def invalid_namespace? raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.invalid_namespace? end
# File tk/lib/multi-tk.rb, line 1706 def ip_name @ip_name || '' end
def mainloop(check_root = true, restart_on_dead = true)
# File tk/lib/multi-tk.rb, line 2744 def mainloop(check_root = true, restart_on_dead = false) raise SecurityError, "no permission to manipulate" unless self.manipulable? if WITH_RUBY_VM ### Ruby 1.9 !!!!!!!!!!! return @interp_thread.value if @interp_thread end #return self if self.slave? #return self if self != @@DEFAULT_MASTER if self != @@DEFAULT_MASTER if @wait_on_mainloop[0] begin @wait_on_mainloop[1] += 1 if $SAFE >= 4 _receiver_mainloop(check_root).join else @cmd_queue.enq([@system, 'call_mainloop', Thread.current, check_root]) Thread.stop end rescue MultiTkIp_OK => ret # return value if ret.value.kind_of?(Thread) return ret.value.value else return ret.value end rescue SystemExit => e # exit IP warn("Warning: " + e.inspect + " on " + self.inspect) if $DEBUG begin self._eval_without_enc('exit') rescue Exception end self.delete rescue StandardError => e if $DEBUG warn("Warning: " + e.class.inspect + ((e.message.length > 0)? ' "' + e.message + '"': '') + " on " + self.inspect) end return e rescue Exception => e return e ensure @wait_on_mainloop[1] -= 1 end end return end unless restart_on_dead @wait_on_mainloop[1] += 1 begin @interp.mainloop(check_root) rescue StandardError => e if $DEBUG warn("Warning: " + e.class.inspect + ((e.message.length > 0)? ' "' + e.message + '"': '') + " on " + self.inspect) end end begin @interp.mainloop(check_root) ensure @wait_on_mainloop[1] -= 1 end else loop do break unless self.alive? if check_root begin break if TclTkLib.num_of_mainwindows == 0 rescue StandardError break end end break if @interp.deleted? begin @wait_on_mainloop[1] += 1 @interp.mainloop(check_root) rescue StandardError => e if TclTkLib.mainloop_abort_on_exception != nil #STDERR.print("Warning: Tk mainloop receives ", $!.class.inspect, # " exception (ignore) : ", $!.message, "\n"); if $DEBUG warn("Warning: Tk mainloop receives " << e.class.inspect << " exception (ignore) : " << e.message); end end #raise e rescue Exception => e if TclTkLib.mainloop_abort_on_exception != nil #STDERR.print("Warning: Tk mainloop receives ", $!.class.inspect, # " exception (ignore) : ", $!.message, "\n"); if $DEBUG warn("Warning: Tk mainloop receives " << e.class.inspect << " exception (ignore) : " << e.message); end end raise e ensure @wait_on_mainloop[1] -= 1 Thread.pass # avoid eventloop conflict end end end self end
# File tk/lib/multi-tk.rb, line 2858 def make_safe raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.make_safe end
# File tk/lib/multi-tk.rb, line 1735 def manipulable? return true if (Thread.current.group == ThreadGroup::Default) ip = MultiTkIp.__getip (ip == self) || ip._is_master_of?(@interp) end
# File tk/lib/multi-tk.rb, line 3352 def mark_trusted(slave = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'marktrusted', _slavearg(slave)) self end
# File tk/lib/multi-tk.rb, line 1667 def master? if @ip_name false else true end end
# File tk/lib/multi-tk.rb, line 3420 def recursion_limit(slave = '', limit = None) raise SecurityError, "no permission to manipulate" unless self.manipulable? number(@interp._invoke('interp', 'recursionlimit', _slavearg(slave), limit)) end
# File tk/lib/multi-tk.rb, line 2996 def restart(app_name = nil, keys = {}) raise SecurityError, "no permission to manipulate" unless self.manipulable? _init_ip_internal(@@INIT_IP_ENV, @@ADD_TK_PROCS) @interp._invoke('set', 'argv0', app_name) if app_name if keys.kind_of?(Hash) @interp._invoke('set', 'argv', _keys2opts(keys)) end @interp.restart end
# File tk/lib/multi-tk.rb, line 346 def running_mainloop? @wait_on_mainloop[1] > 0 end
# File tk/lib/multi-tk.rb, line 2863 def safe? raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp.safe? end
# File tk/lib/multi-tk.rb, line 2868 def safe_base? raise SecurityError, "no permission to manipulate" unless self.manipulable? @safe_base end
# File tk/lib/multi-tk.rb, line 332 def safe_level @safe_level[0] end
# File tk/lib/multi-tk.rb, line 323 def safe_level=(safe) set_safe_level(safe) end
# File tk/lib/multi-tk.rb, line 3583 def safeip_add_to_access_path(dir) ip = MultiTkIp.__getip ip._eval("::safe::interpAddToAccessPath #{@ip_name} #{dir}") end
# File tk/lib/multi-tk.rb, line 3538 def safeip_configinfo(slot = nil) ip = MultiTkIp.__getip ret = {} if slot conf = _lst2ary(ip._eval("::safe::interpConfigure " + @ip_name + " -#{slot}")) if conf[0] == '-deleteHook' if conf[1] =~ /^rb_out\S* (c(_\d+_)?\d+)/ ret[conf[0][1..-1]] = MultiTkIp._tk_cmd_tbl[$1] if conf[1] =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/ ret[conf[0][1..-1]] = MultiTkIp._tk_cmd_tbl[$4] else ret[conf[0][1..-1]] = conf[1] end else ret[conf[0][1..-1]] = conf[1] end else Hash[*_lst2ary(ip._eval("::safe::interpConfigure " + @ip_name))].each{|k, v| if k == '-deleteHook' if v =~ /^rb_out\S* (c(_\d+_)?\d+)/ ret[k[1..-1]] = MultiTkIp._tk_cmd_tbl[$1] if v =~ /rb_out\S*(?:\s+(::\S*|[{](::.*)[}]|["](::.*)["]))? (c(_\d+_)?(\d+))/ ret[k[1..-1]] = MultiTkIp._tk_cmd_tbl[$4] else ret[k[1..-1]] = v end else ret[k[1..-1]] = v end } end ret end
# File tk/lib/multi-tk.rb, line 3525 def safeip_configure(slot, value=None) # use for '-noStatics' option ==> {statics=>false} # for '-nestedLoadOk' option ==> {nested=>true} if slot.kind_of?(Hash) ip = MultiTkIp.__getip ip._eval('::safe::interpConfigure ' + @ip_name + ' ' + _keys2opts(slot)) else ip._eval('::safe::interpConfigure ' + @ip_name + ' ' + "-#{slot} #{_get_eval_string(value)}") end self end
# File tk/lib/multi-tk.rb, line 3578 def safeip_delete ip = MultiTkIp.__getip ip._eval("::safe::interpDelete " + @ip_name) end
# File tk/lib/multi-tk.rb, line 3588 def safeip_find_in_access_path(dir) ip = MultiTkIp.__getip ip._eval("::safe::interpFindInAccessPath #{@ip_name} #{dir}") end
# File tk/lib/multi-tk.rb, line 3593 def safeip_set_log_cmd(cmd = Proc.new) ip = MultiTkIp.__getip ip._eval("::safe::setLogCmd #{@ip_name} #{_get_eval_string(cmd)}") end
# File tk/lib/multi-tk.rb, line 3362 def set_bgerror_handler(cmd = Proc.new, slave = nil, &b) raise SecurityError, "no permission to manipulate" unless self.manipulable? unless TkComm._callback_entry?(cmd) if !slave && b slave = cmd cmd = Proc.new(&b) end end slave = '' unless slave @interp._invoke('interp', 'bgerror', _slavearg(slave), cmd) end
# File tk/lib/multi-tk.rb, line 304 def set_cb_error(cmd = Proc.new) @cb_error_proc[0] = cmd end
# File tk/lib/multi-tk.rb, line 3387 def set_limit(limit_type, slave = '', opts = {}) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'limit', _slavearg(slave), limit_type, opts) end
# File tk/lib/multi-tk.rb, line 316 def set_safe_level(safe) if safe > @safe_level[0] @safe_level[0] = safe @cmd_queue.enq([@system, 'set_safe_level', safe]) end @safe_level[0] end
# File tk/lib/multi-tk.rb, line 1719 def slaves(all = false) raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp','slaves').split.map!{|name| if @slave_ip_tbl.key?(name) @slave_ip_tbl[name] elsif all name else nil end }.compact! end
# File tk/lib/multi-tk.rb, line 1712 def to_eval @ip_name || '' end
# File tk/lib/multi-tk.rb, line 3487 def transfer_stderr(dist, src = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'transfer', src, 'stderr', dist) self end
# File tk/lib/multi-tk.rb, line 3467 def transfer_stdin(dist, src = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'transfer', src, 'stdin', dist) self end
# File tk/lib/multi-tk.rb, line 3509 def transfer_stdio(dist, src = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'transfer', src, 'stdin', dist) @interp._invoke('interp', 'transfer', src, 'stdout', dist) @interp._invoke('interp', 'transfer', src, 'stderr', dist) self end
# File tk/lib/multi-tk.rb, line 3477 def transfer_stdout(dist, src = '') raise SecurityError, "no permission to manipulate" unless self.manipulable? @interp._invoke('interp', 'transfer', src, 'stdout', dist) self end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.