2 # irb/init.rb - irb initialize module
3 # $Release Version: 0.9.5$
5 # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6 # by Keiju ISHITSUKA(keiju@ruby-lang.org)
16 def IRB.setup(ap_path)
17 IRB.init_config(ap_path)
23 unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
24 IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE])
28 # @CONF default setting
29 def IRB.init_config(ap_path)
30 # class instance variables
31 @TRACER_INITIALIZED = false
33 # default configurations
34 unless ap_path and @CONF[:AP_NAME]
35 ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
37 @CONF[:AP_NAME] = File::basename(ap_path, ".rb")
39 @CONF[:IRB_NAME] = "irb"
40 @CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)
43 @CONF[:LOAD_MODULES] = []
46 @CONF[:MATH_MODE] = false
47 @CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
48 @CONF[:INSPECT_MODE] = nil
49 @CONF[:USE_TRACER] = false
50 @CONF[:USE_LOADER] = false
51 @CONF[:IGNORE_SIGINT] = true
52 @CONF[:IGNORE_EOF] = false
56 @CONF[:EVAL_HISTORY] = nil
57 @CONF[:SAVE_HISTORY] = nil
59 @CONF[:BACK_TRACE_LIMIT] = 16
70 :PROMPT_I => "%N(%m):%03n:%i> ",
71 :PROMPT_N => "%N(%m):%03n:%i> ",
72 :PROMPT_S => "%N(%m):%03n:%i%l ",
73 :PROMPT_C => "%N(%m):%03n:%i* ",
77 :PROMPT_I => "%N(%m):%03n:%i> ",
78 :PROMPT_N => "%N(%m):%03n:%i> ",
79 :PROMPT_S => "%N(%m):%03n:%i%l ",
80 :PROMPT_C => "%N(%m):%03n:%i* ",
91 :PROMPT_I => "%N(%m):%03n:%i> ",
92 # :PROMPT_N => "%N(%m):%03n:%i> ",
104 :RETURN => " ==>%s\n"
108 @CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
109 @CONF[:AUTO_INDENT] = false
111 @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
112 @CONF[:SINGLE_IRB] = false
114 # @CONF[:LC_MESSAGES] = "en"
115 @CONF[:LC_MESSAGES] = Locale.new
117 @CONF[:DEBUG_LEVEL] = 1
121 @CONF[:LC_MESSAGES].load("irb/error.rb")
124 FEATURE_IOPT_CHANGE_VERSION = "1.9.0"
129 while opt = ARGV.shift
134 @CONF[:MATH_MODE] = true
138 opt = $1 || ARGV.shift
139 @CONF[:LOAD_MODULES].push opt if opt
141 opt = $1 || ARGV.shift
142 load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt
146 @CONF[:INSPECT_MODE] = true
148 @CONF[:INSPECT_MODE] = false
150 @CONF[:USE_READLINE] = true
152 @CONF[:USE_READLINE] = false
158 @CONF[:VERBOSE] = true
160 @CONF[:VERBOSE] = false
161 when "--prompt-mode", "--prompt"
162 prompt_mode = ARGV.shift.upcase.tr("-", "_").intern
163 @CONF[:PROMPT_MODE] = prompt_mode
165 @CONF[:PROMPT_MODE] = :NULL
166 when "--inf-ruby-mode"
167 @CONF[:PROMPT_MODE] = :INF_RUBY
168 when "--sample-book-mode", "--simple-prompt"
169 @CONF[:PROMPT_MODE] = :SIMPLE
171 @CONF[:USE_TRACER] = true
172 when "--back-trace-limit"
173 @CONF[:BACK_TRACE_LIMIT] = ARGV.shift.to_i
174 when "--context-mode"
175 @CONF[:CONTEXT_MODE] = ARGV.shift.to_i
177 @CONF[:SINGLE_IRB] = true
179 @CONF[:DEBUG_LEVEL] = ARGV.shift.to_i
180 when "-v", "--version"
181 print IRB.version, "\n"
188 IRB.fail UnrecognizedSwitch, opt
195 if RUBY_VERSION >= FEATURE_IOPT_CHANGE_VERSION
196 load_path.collect! do |path|
197 /\A\.\// =~ path ? path : File.expand_path(path)
200 $LOAD_PATH.unshift(*load_path)
208 rescue LoadError, Errno::ENOENT
210 print "load error: #{rc_file}\n"
211 print $!.class, ": ", $!, "\n"
212 for err in $@[0, $@.size - 2]
213 print "\t", err, "\n"
220 def IRB.rc_file(ext = IRBRC_EXT)
221 if !@CONF[:RC_NAME_GENERATOR]
222 rc_file_generators do |rcgen|
223 @CONF[:RC_NAME_GENERATOR] ||= rcgen
224 if File.exist?(rcgen.call(IRBRC_EXT))
225 @CONF[:RC_NAME_GENERATOR] = rcgen
230 @CONF[:RC_NAME_GENERATOR].call ext
233 # enumerate possible rc-file base name generators
234 def IRB.rc_file_generators
235 if irbrc = ENV["IRBRC"]
236 yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
238 if home = ENV["HOME"]
239 yield proc{|rc| home+"/.irb#{rc}"}
242 yield proc{|rc| home+"/.irb#{rc}"}
243 yield proc{|rc| home+"/irb#{rc.sub(/\A_?/, '.')}"}
244 yield proc{|rc| home+"/_irb#{rc}"}
245 yield proc{|rc| home+"/$irb#{rc}"}
250 for m in @CONF[:LOAD_MODULES]
254 print $@[0], ":", $!.class, ": ", $!, "\n"