Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • irb.rb
  • irb/cmd/chws.rb
  • irb/cmd/fork.rb
  • irb/cmd/help.rb
  • irb/cmd/load.rb
  • irb/cmd/nop.rb
  • irb/cmd/pushws.rb
  • irb/cmd/subirb.rb
  • irb/completion.rb
  • irb/context.rb
  • irb/ext/change-ws.rb
  • irb/ext/history.rb
  • irb/ext/loader.rb
  • irb/ext/math-mode.rb
  • irb/ext/multi-irb.rb
  • irb/ext/save-history.rb
  • irb/ext/tracer.rb
  • irb/ext/use-loader.rb
  • irb/ext/workspaces.rb
  • irb/extend-command.rb
  • irb/frame.rb
  • irb/help.rb
  • irb/init.rb
  • irb/input-method.rb
  • irb/inspector.rb
  • irb/lc/error.rb
  • irb/lc/ja/encoding_aliases.rb
  • irb/lc/ja/error.rb
  • irb/locale.rb
  • irb/magic-file.rb
  • irb/notifier.rb
  • irb/output-method.rb
  • irb/ruby-lex.rb
  • irb/slex.rb
  • irb/version.rb
  • irb/workspace.rb
  • irb/ws-for-case-2.rb
  • irb/xmp.rb

IRB

nop.rb -
    $Release Version: 0.9.6$
    $Revision: 25189 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

irb/ext/cb.rb -
    $Release Version: 0.9.6$
    $Revision: 25189 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

history.rb -
    $Release Version: 0.9.6$
    $Revision: 25189 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

loader.rb -
    $Release Version: 0.9.6$
    $Revision: 25189 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

push-ws.rb -
    $Release Version: 0.9.6$
    $Revision: 25189 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

irb/extend-command.rb - irb extend command
    $Release Version: 0.9.6$
    $Revision: 25998 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

irb/init.rb - irb initialize module
    $Release Version: 0.9.6$
    $Revision: 31573 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

irb/inspector.rb - inspect methods
    $Release Version: 0.9.6$
    $Revision: 1.19 $
    $Date: 2002/06/11 07:51:31 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

irb/locale.rb - internationalization module
    $Release Version: 0.9.6$
    $Revision: 31573 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

irb/version.rb - irb version definition file
    $Release Version: 0.9.6$
    $Revision: 25189 $
    by Keiju ISHITSUKA(keiju@ishitsuka.com)

irb/workspace-binding.rb -
    $Release Version: 0.9.6$
    $Revision: 32252 $
    by Keiju ISHITSUKA(keiju@ruby-lang.org)

Constants

DefaultEncodings
FEATURE_IOPT_CHANGE_VERSION
INSPECTORS
IRBRC_EXT
STDIN_FILE_NAME

InputMethod

StdioInputMethod
FileInputMethod
(ReadlineInputMethod)

Public Class Methods

CurrentContext() click to toggle source
 
               # File irb.rb, line 45
def IRB.CurrentContext
  IRB.conf[:MAIN_CONTEXT]
end
            
Inspector(inspect, init = nil) click to toggle source
 
               # File irb/inspector.rb, line 15
def IRB::Inspector(inspect, init = nil)
  Inspector.new(inspect, init)
end
            
JobManager() click to toggle source
 
               # File irb/ext/multi-irb.rb, line 138
def IRB.JobManager
  @JobManager
end
            
conf() click to toggle source
 
               # File irb.rb, line 32
def IRB.conf
  @CONF
end
            
delete_caller() click to toggle source
 
               # File irb/workspace.rb, line 105
def IRB.delete_caller
end
            
init_config(ap_path) click to toggle source

@CONF default setting

 
               # File irb/init.rb, line 28
  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] = true
    @CONF[:USE_TRACER] = false
    @CONF[:USE_LOADER] = false
    @CONF[:IGNORE_SIGINT] = true
    @CONF[:IGNORE_EOF] = false
    @CONF[:ECHO] = nil
    @CONF[:VERBOSE] = nil

    @CONF[:EVAL_HISTORY] = nil
    @CONF[:SAVE_HISTORY] = nil

    @CONF[:BACK_TRACE_LIMIT] = 16

    @CONF[:PROMPT] = {
      :NULL => {
        :PROMPT_I => nil,
        :PROMPT_N => nil,
        :PROMPT_S => nil,
        :PROMPT_C => nil,
        :RETURN => "%s\n"
      },
      :DEFAULT => {
        :PROMPT_I => "%N(%m):%03n:%i> ",
        :PROMPT_N => "%N(%m):%03n:%i> ",
        :PROMPT_S => "%N(%m):%03n:%i%l ",
        :PROMPT_C => "%N(%m):%03n:%i* ",
        :RETURN => "=> %s\n"
      },
      :CLASSIC => {
        :PROMPT_I => "%N(%m):%03n:%i> ",
        :PROMPT_N => "%N(%m):%03n:%i> ",
        :PROMPT_S => "%N(%m):%03n:%i%l ",
        :PROMPT_C => "%N(%m):%03n:%i* ",
        :RETURN => "%s\n"
      },
      :SIMPLE => {
        :PROMPT_I => ">> ",
        :PROMPT_N => ">> ",
        :PROMPT_S => nil,
        :PROMPT_C => "?> ",
        :RETURN => "=> %s\n"
      },
      :INF_RUBY => {
        :PROMPT_I => "%N(%m):%03n:%i> ",
#       :PROMPT_N => "%N(%m):%03n:%i> ",
        :PROMPT_N => nil,
        :PROMPT_S => nil,
        :PROMPT_C => nil,
        :RETURN => "%s\n",
        :AUTO_INDENT => true
      },
      :XMP => {
        :PROMPT_I => nil,
        :PROMPT_N => nil,
        :PROMPT_S => nil,
        :PROMPT_C => nil,
        :RETURN => "    ==>%s\n"
      }
    }

    @CONF[:PROMPT_MODE] = (STDIN.tty? ? :DEFAULT : :NULL)
    @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[:AT_EXIT] = []

    @CONF[:DEBUG_LEVEL] = 1
  end
            
init_error() click to toggle source
 
               # File irb/init.rb, line 121
def IRB.init_error
  @CONF[:LC_MESSAGES].load("irb/error.rb")
end
            
initialize_tracer() click to toggle source

initialize tracing function

 
               # File irb/ext/tracer.rb, line 16
def IRB.initialize_tracer
  Tracer.verbose = false
  Tracer.add_filter {
    |event, file, line, id, binding, *rests|
    /^#{Regexp.quote(@CONF[:IRB_LIB_PATH])}/ !~ file and
      File::basename(file) != "irb.rb"
  }
end
            
irb(file = nil, *main) click to toggle source

invoke multi-irb

 
               # File irb/ext/multi-irb.rb, line 147
def IRB.irb(file = nil, *main)
  workspace = WorkSpace.new(*main)
  parent_thread = Thread.current
  Thread.start do
    begin
      irb = Irb.new(workspace, file)
    rescue
      print "Subirb can't start with context(self): ", workspace.main.inspect, "\n"
      print "return to main irb\n"
      Thread.pass
      Thread.main.wakeup
      Thread.exit
    end
    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
    @JobManager.insert(irb)
    @JobManager.current_job = irb
    begin
      system_exit = false
      catch(:IRB_EXIT) do
        irb.eval_input
      end
    rescue SystemExit
      system_exit = true
      raise
      #fail
    ensure
      unless system_exit
        @JobManager.delete(irb)
        if @JobManager.current_job == irb
          if parent_thread.alive?
            @JobManager.current_job = @JobManager.irb(parent_thread)
            parent_thread.run
          else
            @JobManager.current_job = @JobManager.main_irb
            @JobManager.main_thread.run
          end
        end
      end
    end
  end
  Thread.stop
  @JobManager.current_job = @JobManager.irb(Thread.current)
end
            
irb_abort(irb, exception = Abort) click to toggle source
 
               # File irb.rb, line 86
def IRB.irb_abort(irb, exception = Abort)
  if defined? Thread
    irb.context.thread.raise exception, "abort then interrupt!"
  else
    raise exception, "abort then interrupt!"
  end
end
            
irb_at_exit() click to toggle source
 
               # File irb.rb, line 78
def IRB.irb_at_exit
  @CONF[:AT_EXIT].each{|hook| hook.call}
end
            
irb_exit(irb, ret) click to toggle source
 
               # File irb.rb, line 82
def IRB.irb_exit(irb, ret)
  throw :IRB_EXIT, ret
end
            
load_modules() click to toggle source

loading modules

 
               # File irb/init.rb, line 278
def IRB.load_modules
  for m in @CONF[:LOAD_MODULES]
    begin
      require m
    rescue LoadError => err
      warn err.backtrace[0] << ":#{err.class}: #{err}"
    end
  end
end
            
parse_opts() click to toggle source

option analyzing

 
               # File irb/init.rb, line 128
def IRB.parse_opts
  load_path = []
  while opt = ARGV.shift
    case opt
    when "-f"
      @CONF[:RC] = false
    when "-m"
      @CONF[:MATH_MODE] = true
    when "-d"
      $DEBUG = true
      $VERBOSE = true
    when "-w"
      $VERBOSE = true
    when /^-W(.+)?/
      opt = $1 || ARGV.shift
      case opt
      when "0"
        $VERBOSE = nil
      when "1"
        $VERBOSE = false
      else
        $VERBOSE = true
      end
    when /^-r(.+)?/
      opt = $1 || ARGV.shift
      @CONF[:LOAD_MODULES].push opt if opt
    when /^-I(.+)?/
      opt = $1 || ARGV.shift
      load_path.concat(opt.split(File::PATH_SEPARATOR)) if opt
    when '-U'
      set_encoding("UTF-8", "UTF-8")
    when /^-E(.+)?/, /^--encoding(?:=(.+))?/
      opt = $1 || ARGV.shift
      set_encoding(*opt.split(':', 2))
    when "--inspect"
      if /^-/ !~ ARGV.first
        @CONF[:INSPECT_MODE] = ARGV.shift
      else
        @CONF[:INSPECT_MODE] = true
      end
    when "--noinspect"
      @CONF[:INSPECT_MODE] = false
    when "--readline"
      @CONF[:USE_READLINE] = true
    when "--noreadline"
      @CONF[:USE_READLINE] = false
    when "--echo"
      @CONF[:ECHO] = true
    when "--noecho"
      @CONF[:ECHO] = false
    when "--verbose"
      @CONF[:VERBOSE] = true
    when "--noverbose"
      @CONF[:VERBOSE] = false
    when /^--prompt-mode(?:=(.+))?/, /^--prompt(?:=(.+))?/
      opt = $1 || ARGV.shift
      prompt_mode = opt.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] = ($1 || ARGV.shift).to_i
    when /^--context-mode(?:=(.+))?/
      @CONF[:CONTEXT_MODE] = ($1 || ARGV.shift).to_i
    when "--single-irb"
      @CONF[:SINGLE_IRB] = true
    when /^--irb_debug=(?:=(.+))?/
      @CONF[:DEBUG_LEVEL] = ($1 || 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 "--"
      if opt = ARGV.shift
        @CONF[:SCRIPT] = opt
        $0 = opt
      end
      break
    when /^-/
      IRB.fail UnrecognizedSwitch, opt
    else
      @CONF[:SCRIPT] = opt
      $0 = opt
      break
    end
  end
  if RUBY_VERSION >= FEATURE_IOPT_CHANGE_VERSION
    load_path.collect! do |path|
      /\A\.\// =~ path ? path : File.expand_path(path)
    end
  end
  $LOAD_PATH.unshift(*load_path)

end
            
rc_file(ext = IRBRC_EXT) click to toggle source
 
               # File irb/init.rb, line 249
def IRB.rc_file(ext = IRBRC_EXT)
  if !@CONF[:RC_NAME_GENERATOR]
    rc_file_generators do |rcgen|
      @CONF[:RC_NAME_GENERATOR] ||= rcgen
      if File.exist?(rcgen.call(IRBRC_EXT))
        @CONF[:RC_NAME_GENERATOR] = rcgen
        break
      end
    end
  end
  @CONF[:RC_NAME_GENERATOR].call ext
end
            
rc_file_generators() click to toggle source

enumerate possible rc-file base name generators

 
               # File irb/init.rb, line 263
def IRB.rc_file_generators
  if irbrc = ENV["IRBRC"]
    yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc}
  end
  if home = ENV["HOME"]
    yield proc{|rc| home+"/.irb#{rc}"}
  end
  home = Dir.pwd
  yield proc{|rc| home+"/.irb#{rc}"}
  yield proc{|rc| home+"/irb#{rc.sub(/\A_?/, '.')}"}
  yield proc{|rc| home+"/_irb#{rc}"}
  yield proc{|rc| home+"/$irb#{rc}"}
end
            
run_config() click to toggle source

running config

 
               # File irb/init.rb, line 233
def IRB.run_config
  if @CONF[:RC]
    begin
      load rc_file
    rescue LoadError, Errno::ENOENT
    rescue # StandardError, ScriptError
      print "load error: #{rc_file}\n"
      print $!.class, ": ", $!, "\n"
      for err in $@[0, $@.size - 2]
        print "\t", err, "\n"
      end
    end
  end
end
            
setup(ap_path) click to toggle source

initialize config

 
               # File irb/init.rb, line 15
def IRB.setup(ap_path)
  IRB.init_config(ap_path)
  IRB.init_error
  IRB.parse_opts
  IRB.run_config
  IRB.load_modules

  unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]]
    IRB.fail(UndefinedPromptMode, @CONF[:PROMPT_MODE])
  end
end
            
start(ap_path = nil) click to toggle source

initialize IRB and start TOP_LEVEL irb

 
               # File irb.rb, line 50
  def IRB.start(ap_path = nil)
    $0 = File::basename(ap_path, ".rb") if ap_path

    IRB.setup(ap_path)

    if @CONF[:SCRIPT]
      irb = Irb.new(nil, @CONF[:SCRIPT])
    else
      irb = Irb.new
    end

    @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
    @CONF[:MAIN_CONTEXT] = irb.context

    trap("SIGINT") do
      irb.signal_handle
    end

    begin
      catch(:IRB_EXIT) do
        irb.eval_input
      end
    ensure
      irb_at_exit
    end
#    print "\n"
  end
            
version() click to toggle source

IRB version method

 
               # File irb.rb, line 37
def IRB.version
  if v = @CONF[:VERSION] then return v end

  require "irb/version"
  rv = @RELEASE_VERSION.sub(/\.0/, "")
  @CONF[:VERSION] = format("irb %s(%s)", rv, @LAST_UPDATE_DATE)
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.