2001-04-30 21:38:21 +04:00
|
|
|
#
|
|
|
|
# irb/init.rb - irb initialize module
|
2002-07-09 15:17:17 +04:00
|
|
|
# $Release Version: 0.9$
|
2001-04-30 21:38:21 +04:00
|
|
|
# $Revision$
|
|
|
|
# $Date$
|
|
|
|
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
|
|
|
|
#
|
|
|
|
# --
|
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
|
|
|
|
module IRB
|
|
|
|
|
|
|
|
# initialize config
|
2002-11-19 05:00:18 +03:00
|
|
|
def IRB.setup(ap_path)
|
2001-04-30 21:38:21 +04:00
|
|
|
IRB.init_config(ap_path)
|
|
|
|
IRB.init_error
|
2002-07-09 15:17:17 +04:00
|
|
|
IRB.parse_opts
|
2001-04-30 21:38:21 +04:00
|
|
|
IRB.run_config
|
2002-07-09 15:17:17 +04:00
|
|
|
IRB.load_modules
|
|
|
|
|
|
|
|
unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
|
|
|
|
IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE])
|
|
|
|
end
|
2001-04-30 21:38:21 +04:00
|
|
|
end
|
|
|
|
|
|
|
|
# @CONF default setting
|
|
|
|
def IRB.init_config(ap_path)
|
|
|
|
# class instance variables
|
|
|
|
@TRACER_INITIALIZED = false
|
|
|
|
|
|
|
|
# default configurations
|
|
|
|
unless ap_path and @CONF[:AP_NAME]
|
|
|
|
ap_path = File.join(File.dirname(File.dirname(__FILE__)), "irb.rb")
|
|
|
|
end
|
|
|
|
@CONF[:AP_NAME] = File::basename(ap_path, ".rb")
|
|
|
|
|
|
|
|
@CONF[:IRB_NAME] = "irb"
|
|
|
|
@CONF[:IRB_LIB_PATH] = File.dirname(__FILE__)
|
|
|
|
|
|
|
|
@CONF[:RC] = true
|
|
|
|
@CONF[:LOAD_MODULES] = []
|
|
|
|
@CONF[:IRB_RC] = nil
|
|
|
|
|
|
|
|
@CONF[:MATH_MODE] = false
|
|
|
|
@CONF[:USE_READLINE] = false unless defined?(ReadlineInputMethod)
|
|
|
|
@CONF[:INSPECT_MODE] = nil
|
|
|
|
@CONF[:USE_TRACER] = false
|
|
|
|
@CONF[:USE_LOADER] = false
|
|
|
|
@CONF[:IGNORE_SIGINT] = true
|
|
|
|
@CONF[:IGNORE_EOF] = false
|
2002-07-09 15:17:17 +04:00
|
|
|
@CONF[:ECHO] = nil
|
|
|
|
@CONF[:VERBOSE] = nil
|
|
|
|
|
|
|
|
@CONF[:EVAL_HISTORY] = nil
|
2001-04-30 21:38:21 +04:00
|
|
|
|
|
|
|
@CONF[:BACK_TRACE_LIMIT] = 16
|
|
|
|
|
|
|
|
@CONF[:PROMPT] = {
|
|
|
|
:NULL => {
|
|
|
|
:PROMPT_I => nil,
|
|
|
|
:PROMPT_S => nil,
|
|
|
|
:PROMPT_C => nil,
|
|
|
|
:RETURN => "%s\n"
|
|
|
|
},
|
|
|
|
:DEFAULT => {
|
2002-11-22 08:10:42 +03:00
|
|
|
:PROMPT_I => "%N(%m):%03n:%i> ",
|
|
|
|
:PROMPT_S => "%N(%m):%03n:%i%l ",
|
|
|
|
:PROMPT_C => "%N(%m):%03n:%i* ",
|
|
|
|
:RETURN => "=> %s\n"
|
|
|
|
},
|
|
|
|
:CLASSIC => {
|
2001-04-30 21:38:21 +04:00
|
|
|
:PROMPT_I => "%N(%m):%03n:%i> ",
|
|
|
|
:PROMPT_S => "%N(%m):%03n:%i%l ",
|
|
|
|
:PROMPT_C => "%N(%m):%03n:%i* ",
|
|
|
|
:RETURN => "%s\n"
|
|
|
|
},
|
|
|
|
:SIMPLE => {
|
|
|
|
:PROMPT_I => ">> ",
|
|
|
|
:PROMPT_S => nil,
|
|
|
|
:PROMPT_C => "?> ",
|
|
|
|
:RETURN => "=> %s\n"
|
|
|
|
},
|
|
|
|
:INF_RUBY => {
|
|
|
|
:PROMPT_I => "%N(%m):%03n:%i> ",
|
|
|
|
:PROMPT_S => nil,
|
|
|
|
:PROMPT_C => nil,
|
|
|
|
:RETURN => "%s\n",
|
|
|
|
:AUTO_INDENT => true
|
|
|
|
},
|
|
|
|
:XMP => {
|
|
|
|
:PROMPT_I => nil,
|
|
|
|
:PROMPT_S => nil,
|
|
|
|
:PROMPT_C => nil,
|
|
|
|
:RETURN => " ==>%s\n"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-01-17 01:09:29 +03:00
|
|
|
@CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
|
2001-04-30 21:38:21 +04:00
|
|
|
@CONF[:AUTO_INDENT] = false
|
|
|
|
|
|
|
|
@CONF[:CONTEXT_MODE] = 3 # use binding in function on TOPLEVEL_BINDING
|
|
|
|
@CONF[:SINGLE_IRB] = false
|
|
|
|
|
|
|
|
# @CONF[:LC_MESSAGES] = "en"
|
|
|
|
@CONF[:LC_MESSAGES] = Locale.new
|
|
|
|
|
|
|
|
@CONF[:DEBUG_LEVEL] = 1
|
|
|
|
end
|
|
|
|
|
|
|
|
def IRB.init_error
|
|
|
|
@CONF[:LC_MESSAGES].load("irb/error.rb")
|
|
|
|
end
|
|
|
|
|
|
|
|
# option analyzing
|
|
|
|
def IRB.parse_opts
|
|
|
|
while opt = ARGV.shift
|
|
|
|
case opt
|
|
|
|
when "-f"
|
|
|
|
@CONF[:RC] = false
|
|
|
|
when "-m"
|
|
|
|
@CONF[:MATH_MODE] = true
|
|
|
|
when "-d"
|
|
|
|
$DEBUG = true
|
2005-01-17 01:09:29 +03:00
|
|
|
when /^-r(.+)?/
|
|
|
|
opt = $1 || ARGV.shift
|
2001-04-30 21:38:21 +04:00
|
|
|
@CONF[:LOAD_MODULES].push opt if opt
|
2005-01-17 01:09:29 +03:00
|
|
|
when /^-I(.+)?/
|
|
|
|
opt = $1 || ARGV.shift
|
2004-02-20 13:03:47 +03:00
|
|
|
$LOAD_PATH.push opt if opt
|
2002-07-09 15:17:17 +04:00
|
|
|
when /^-K(.)/
|
|
|
|
$KCODE = $1
|
2001-04-30 21:38:21 +04:00
|
|
|
when "--inspect"
|
|
|
|
@CONF[:INSPECT_MODE] = true
|
|
|
|
when "--noinspect"
|
|
|
|
@CONF[:INSPECT_MODE] = false
|
|
|
|
when "--readline"
|
|
|
|
@CONF[:USE_READLINE] = true
|
|
|
|
when "--noreadline"
|
|
|
|
@CONF[:USE_READLINE] = false
|
2002-07-09 15:17:17 +04:00
|
|
|
when "--echo"
|
|
|
|
@CONF[:ECHO] = true
|
|
|
|
when "--noecho"
|
|
|
|
@CONF[:ECHO] = false
|
|
|
|
when "--verbose"
|
|
|
|
@CONF[:VERBOSE] = true
|
|
|
|
when "--noverbose"
|
|
|
|
@CONF[:VERBOSE] = false
|
2001-04-30 21:38:21 +04:00
|
|
|
when "--prompt-mode", "--prompt"
|
|
|
|
prompt_mode = ARGV.shift.upcase.tr("-", "_").intern
|
|
|
|
@CONF[:PROMPT_MODE] = prompt_mode
|
|
|
|
when "--noprompt"
|
|
|
|
@CONF[:PROMPT_MODE] = :NULL
|
|
|
|
when "--inf-ruby-mode"
|
|
|
|
@CONF[:PROMPT_MODE] = :INF_RUBY
|
|
|
|
when "--sample-book-mode", "--simple-prompt"
|
|
|
|
@CONF[:PROMPT_MODE] = :SIMPLE
|
|
|
|
when "--tracer"
|
|
|
|
@CONF[:USE_TRACER] = true
|
|
|
|
when "--back-trace-limit"
|
|
|
|
@CONF[:BACK_TRACE_LIMIT] = ARGV.shift.to_i
|
|
|
|
when "--context-mode"
|
|
|
|
@CONF[:CONTEXT_MODE] = ARGV.shift.to_i
|
|
|
|
when "--single-irb"
|
|
|
|
@CONF[:SINGLE_IRB] = true
|
|
|
|
when "--irb_debug"
|
|
|
|
@CONF[:DEBUG_LEVEL] = ARGV.shift.to_i
|
|
|
|
when "-v", "--version"
|
|
|
|
print IRB.version, "\n"
|
|
|
|
exit 0
|
|
|
|
when "-h", "--help"
|
|
|
|
require "irb/help"
|
|
|
|
IRB.print_usage
|
|
|
|
exit 0
|
|
|
|
when /^-/
|
|
|
|
IRB.fail UnrecognizedSwitch, opt
|
|
|
|
else
|
|
|
|
@CONF[:SCRIPT] = opt
|
|
|
|
$0 = opt
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2004-02-07 13:56:16 +03:00
|
|
|
# enumerate possible rc files
|
|
|
|
def IRB.rc_files(rc)
|
|
|
|
yield File.expand_path("~/.irb#{rc}") if ENV.key?("HOME")
|
|
|
|
yield ".irb#{rc}"
|
|
|
|
yield "irb#{rc.sub(/\A_?/, '.')}"
|
|
|
|
yield "_irb#{rc}"
|
|
|
|
yield "$irb#{rc}"
|
|
|
|
end
|
|
|
|
|
2001-04-30 21:38:21 +04:00
|
|
|
# running config
|
|
|
|
def IRB.run_config
|
|
|
|
if @CONF[:RC]
|
|
|
|
catch(:EXIT) do
|
2004-02-07 13:56:16 +03:00
|
|
|
rc_files("rc") do |rc|
|
2001-04-30 21:38:21 +04:00
|
|
|
begin
|
|
|
|
load rc
|
|
|
|
throw :EXIT
|
|
|
|
rescue LoadError, Errno::ENOENT
|
|
|
|
rescue
|
|
|
|
print "load error: #{rc}\n"
|
2002-10-02 20:45:35 +04:00
|
|
|
print $!.class, ": ", $!, "\n"
|
2001-04-30 21:38:21 +04:00
|
|
|
for err in $@[0, $@.size - 2]
|
|
|
|
print "\t", err, "\n"
|
|
|
|
end
|
|
|
|
throw :EXIT
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# loading modules
|
|
|
|
def IRB.load_modules
|
|
|
|
for m in @CONF[:LOAD_MODULES]
|
|
|
|
begin
|
|
|
|
require m
|
|
|
|
rescue
|
2002-10-02 20:45:35 +04:00
|
|
|
print $@[0], ":", $!.class, ": ", $!, "\n"
|
2001-04-30 21:38:21 +04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|