1 | #
|
---|
2 | # irb/init.rb - irb initialize module
|
---|
3 | # $Release Version: 0.9.5$
|
---|
4 | # $Revision: 11708 $
|
---|
5 | # $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $
|
---|
6 | # by Keiju ISHITSUKA([email protected])
|
---|
7 | #
|
---|
8 | # --
|
---|
9 | #
|
---|
10 | #
|
---|
11 | #
|
---|
12 |
|
---|
13 | module IRB
|
---|
14 |
|
---|
15 | # initialize config
|
---|
16 | def IRB.setup(ap_path)
|
---|
17 | IRB.init_config(ap_path)
|
---|
18 | IRB.init_error
|
---|
19 | IRB.parse_opts
|
---|
20 | IRB.run_config
|
---|
21 | IRB.load_modules
|
---|
22 |
|
---|
23 | unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
|
---|
24 | IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE])
|
---|
25 | end
|
---|
26 | end
|
---|
27 |
|
---|
28 | # @CONF default setting
|
---|
29 | def IRB.init_config(ap_path)
|
---|
30 | # class instance variables
|
---|
31 | @TRACER_INITIALIZED = false
|
---|
32 |
|
---|
33 | # default configurations
|
---|
34 | unless ap_path and @CONF[:AP_NAME]
|
---|
35 | ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
|
---|
36 | end
|
---|
37 | @CONF[:AP_NAME] = File::basename(ap_path, ".rb")
|
---|
38 |
|
---|
39 | @CONF[:IRB_NAME] = "irb"
|
---|
40 | @CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)
|
---|
41 |
|
---|
42 | @CONF[:RC] = true
|
---|
43 | @CONF[:LOAD_MODULES] = []
|
---|
44 | @CONF[:IRB_RC] = nil
|
---|
45 |
|
---|
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
|
---|
53 | @CONF[:ECHO] = nil
|
---|
54 | @CONF[:VERBOSE] = nil
|
---|
55 |
|
---|
56 | @CONF[:EVAL_HISTORY] = nil
|
---|
57 | @CONF[:SAVE_HISTORY] = nil
|
---|
58 |
|
---|
59 | @CONF[:BACK_TRACE_LIMIT] = 16
|
---|
60 |
|
---|
61 | @CONF[:PROMPT] = {
|
---|
62 | :NULL => {
|
---|
63 | :PROMPT_I => nil,
|
---|
64 | :PROMPT_N => nil,
|
---|
65 | :PROMPT_S => nil,
|
---|
66 | :PROMPT_C => nil,
|
---|
67 | :RETURN => "%s\n"
|
---|
68 | },
|
---|
69 | :DEFAULT => {
|
---|
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* ",
|
---|
74 | :RETURN => "=> %s\n"
|
---|
75 | },
|
---|
76 | :CLASSIC => {
|
---|
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* ",
|
---|
81 | :RETURN => "%s\n"
|
---|
82 | },
|
---|
83 | :SIMPLE => {
|
---|
84 | :PROMPT_I => ">> ",
|
---|
85 | :PROMPT_N => ">> ",
|
---|
86 | :PROMPT_S => nil,
|
---|
87 | :PROMPT_C => "?> ",
|
---|
88 | :RETURN => "=> %s\n"
|
---|
89 | },
|
---|
90 | :INF_RUBY => {
|
---|
91 | :PROMPT_I => "%N(%m):%03n:%i> ",
|
---|
92 | # :PROMPT_N => "%N(%m):%03n:%i> ",
|
---|
93 | :PROMPT_N => nil,
|
---|
94 | :PROMPT_S => nil,
|
---|
95 | :PROMPT_C => nil,
|
---|
96 | :RETURN => "%s\n",
|
---|
97 | :AUTO_INDENT => true
|
---|
98 | },
|
---|
99 | :XMP => {
|
---|
100 | :PROMPT_I => nil,
|
---|
101 | :PROMPT_N => nil,
|
---|
102 | :PROMPT_S => nil,
|
---|
103 | :PROMPT_C => nil,
|
---|
104 | :RETURN => " ==>%s\n"
|
---|
105 | }
|
---|
106 | }
|
---|
107 |
|
---|
108 | @CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
|
---|
109 | @CONF[:AUTO_INDENT] = false
|
---|
110 |
|
---|
111 | @CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
|
---|
112 | @CONF[:SINGLE_IRB] = false
|
---|
113 |
|
---|
114 | # @CONF[:LC_MESSAGES] = "en"
|
---|
115 | @CONF[:LC_MESSAGES] = Locale.new
|
---|
116 |
|
---|
117 | @CONF[:DEBUG_LEVEL] = 1
|
---|
118 | end
|
---|
119 |
|
---|
120 | def IRB.init_error
|
---|
121 | @CONF[:LC_MESSAGES].load("irb/error.rb")
|
---|
122 | end
|
---|
123 |
|
---|
124 | FEATURE_IOPT_CHANGE_VERSION = "1.9.0"
|
---|
125 |
|
---|
126 | # option analyzing
|
---|
127 | def IRB.parse_opts
|
---|
128 | load_path = []
|
---|
129 | while opt = ARGV.shift
|
---|
130 | case opt
|
---|
131 | when "-f"
|
---|
132 | @CONF[:RC] = false
|
---|
133 | when "-m"
|
---|
134 | @CONF[:MATH_MODE] = true
|
---|
135 | when "-d"
|
---|
136 | $DEBUG = true
|
---|
137 | when /^-r(.+)?/
|
---|
138 | opt = $1 || ARGV.shift
|
---|
139 | @CONF[:LOAD_MODULES].push opt if opt
|
---|
140 | when /^-I(.+)?/
|
---|
141 | opt = $1 || ARGV.shift
|
---|
142 | load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt
|
---|
143 | when /^-K(.)/
|
---|
144 | $KCODE = $1
|
---|
145 | when "--inspect"
|
---|
146 | @CONF[:INSPECT_MODE] = true
|
---|
147 | when "--noinspect"
|
---|
148 | @CONF[:INSPECT_MODE] = false
|
---|
149 | when "--readline"
|
---|
150 | @CONF[:USE_READLINE] = true
|
---|
151 | when "--noreadline"
|
---|
152 | @CONF[:USE_READLINE] = false
|
---|
153 | when "--echo"
|
---|
154 | @CONF[:ECHO] = true
|
---|
155 | when "--noecho"
|
---|
156 | @CONF[:ECHO] = false
|
---|
157 | when "--verbose"
|
---|
158 | @CONF[:VERBOSE] = true
|
---|
159 | when "--noverbose"
|
---|
160 | @CONF[:VERBOSE] = false
|
---|
161 | when "--prompt-mode", "--prompt"
|
---|
162 | prompt_mode = ARGV.shift.upcase.tr("-", "_").intern
|
---|
163 | @CONF[:PROMPT_MODE] = prompt_mode
|
---|
164 | when "--noprompt"
|
---|
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
|
---|
170 | when "--tracer"
|
---|
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
|
---|
176 | when "--single-irb"
|
---|
177 | @CONF[:SINGLE_IRB] = true
|
---|
178 | when "--irb_debug"
|
---|
179 | @CONF[:DEBUG_LEVEL] = ARGV.shift.to_i
|
---|
180 | when "-v", "--version"
|
---|
181 | print IRB.version, "\n"
|
---|
182 | exit 0
|
---|
183 | when "-h", "--help"
|
---|
184 | require "irb/help"
|
---|
185 | IRB.print_usage
|
---|
186 | exit 0
|
---|
187 | when /^-/
|
---|
188 | IRB.fail UnrecognizedSwitch, opt
|
---|
189 | else
|
---|
190 | @CONF[:SCRIPT] = opt
|
---|
191 | $0 = opt
|
---|
192 | break
|
---|
193 | end
|
---|
194 | end
|
---|
195 | if RUBY_VERSION >= FEATURE_IOPT_CHANGE_VERSION
|
---|
196 | load_path.collect! do |path|
|
---|
197 | /\A\.\// =~ path ? path : File.expand_path(path)
|
---|
198 | end
|
---|
199 | end
|
---|
200 | $LOAD_PATH.unshift(*load_path)
|
---|
201 | end
|
---|
202 |
|
---|
203 | # running config
|
---|
204 | def IRB.run_config
|
---|
205 | if @CONF[:RC]
|
---|
206 | begin
|
---|
207 | load rc_file
|
---|
208 | rescue LoadError, Errno::ENOENT
|
---|
209 | rescue
|
---|
210 | print "load error: #{rc_file}\n"
|
---|
211 | print $!.class, ": ", $!, "\n"
|
---|
212 | for err in $@[0, [email protected] - 2]
|
---|
213 | print "\t", err, "\n"
|
---|
214 | end
|
---|
215 | end
|
---|
216 | end
|
---|
217 | end
|
---|
218 |
|
---|
219 | IRBRC_EXT = "rc"
|
---|
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
|
---|
226 | break
|
---|
227 | end
|
---|
228 | end
|
---|
229 | end
|
---|
230 | @CONF[:RC_NAME_GENERATOR].call ext
|
---|
231 | end
|
---|
232 |
|
---|
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}
|
---|
237 | end
|
---|
238 | if home = ENV["HOME"]
|
---|
239 | yield proc{|rc| home+"/.irb#{rc}"}
|
---|
240 | end
|
---|
241 | home = Dir.pwd
|
---|
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}"}
|
---|
246 | end
|
---|
247 |
|
---|
248 | # loading modules
|
---|
249 | def IRB.load_modules
|
---|
250 | for m in @CONF[:LOAD_MODULES]
|
---|
251 | begin
|
---|
252 | require m
|
---|
253 | rescue
|
---|
254 | print $@[0], ":", $!.class, ": ", $!, "\n"
|
---|
255 | end
|
---|
256 | end
|
---|
257 | end
|
---|
258 |
|
---|
259 | end
|
---|