Module: IRB
Overview
IRB stands for “interactive Ruby” and is a tool to interactively execute Ruby expressions read from the standard input.
The .irb command from your shell will start the interpreter.
Usage
Use of irb is easy if you know Ruby.
When executing irb, prompts are displayed as follows. Then, enter the Ruby expression. An input is executed when it is syntactically complete.
$ irb
irb(main):001:0> 1+2
#=> 3
irb(main):002:0> class Foo
irb(main):003:1>  def foo
irb(main):004:2>    print 1
irb(main):005:2>  end
irb(main):006:1> end
#=> nilThe singleline editor module or multiline editor module can be used with irb. Use of multiline editor is default if it’s installed.
Command line options
Usage:  irb.rb [] [programfile] [arguments]
  -f                Suppress read of ~/.irbrc
  -d                Set $DEBUG to true (same as `ruby -d')
  -r load-module    Same as `ruby -r'
  -I path           Specify $LOAD_PATH directory
  -U                Same as `ruby -U`
  -E enc            Same as `ruby -E`
  -w                Same as `ruby -w`
  -W[level=2]       Same as `ruby -W`
  --context-mode n  Set n[0-4] to method to create Binding Object,
                    when new workspace was created
  --extra-doc-dir   Add an extra doc dir for the doc dialog
  --echo            Show result (default)
  --noecho          Don't show result
  --echo-on-assignment
                    Show result on assignment
  --noecho-on-assignment
                    Don't show result on assignment
  --truncate-echo-on-assignment
                    Show truncated result on assignment (default)
  --inspect         Use `inspect' for output
  --noinspect       Don't use inspect for output
  --multiline       Use multiline editor module
  --nomultiline     Don't use multiline editor module
  --singleline      Use singleline editor module
  --nosingleline    Don't use singleline editor module
  --colorize        Use colorization
  --nocolorize      Don't use colorization
  --autocomplete    Use autocompletion
  --noautocomplete  Don't use autocompletion
  --prompt prompt-mode/--prompt-mode prompt-mode
                    Switch prompt mode. Pre-defined prompt modes are
                    `default', `simple', `xmp' and `inf-ruby'
  --inf-ruby-mode   Use prompt appropriate for inf-ruby-mode on emacs.
                    Suppresses --multiline and --singleline.
  --sample-book-mode/--simple-prompt
                    Simple prompt mode
  --noprompt        No prompt mode
  --single-irb      Share self with sub-irb.
  --tracer          Display trace for each execution of commands.
  --back-trace-limit n
                    Display backtrace top n and tail n. The default
                    value is 16.
  --verbose         Show details
  --noverbose       Don't show details
  -v, --version	    Print the version of irb
  -h, --help        Print help
  --                Separate options of irb from the list of command-line argsConfiguration
IRB reads from ~/.irbrc when it’s invoked.
If ~/.irbrc doesn’t exist, .irb will try to read in the following order:
- 
.irbrc
- 
irb.rc
- 
_irbrc
- 
$irbrc
The following are alternatives to the command line options. To use them type as follows in an .irb session:
IRB.conf[:IRB_NAME]="irb"
IRB.conf[:INSPECT_MODE]=nil
IRB.conf[:IRB_RC] = nil
IRB.conf[:BACK_TRACE_LIMIT]=16
IRB.conf[:USE_LOADER] = false
IRB.conf[:USE_MULTILINE] = nil
IRB.conf[:USE_SINGLELINE] = nil
IRB.conf[:USE_COLORIZE] = true
IRB.conf[:USE_TRACER] = false
IRB.conf[:USE_AUTOCOMPLETE] = true
IRB.conf[:IGNORE_SIGINT] = true
IRB.conf[:IGNORE_EOF] = false
IRB.conf[:PROMPT_MODE] = :DEFAULT
IRB.conf[:PROMPT] = {...}Auto indentation
To disable auto-indent mode in irb, add the following to your .irbrc:
IRB.conf[:AUTO_INDENT] = falseAutocompletion
To enable autocompletion for irb, add the following to your .irbrc:
require 'irb/completion'History
By default, irb will store the last 1000 commands you used in IRB.conf[:HISTORY_FILE] (~/.irb_history by default).
If you want to disable history, add the following to your .irbrc:
IRB.conf[:SAVE_HISTORY] = nilSee Context#save_history= for more information.
The history of results of commands evaluated is not stored by default, but can be turned on to be stored with this .irbrc setting:
IRB.conf[:EVAL_HISTORY] = <number>See Context#eval_history= and History class. The history of command results is not permanently saved in any file.
Customizing the IRB Prompt
In order to customize the prompt, you can change the following Hash:
IRB.conf[:PROMPT]This example can be used in your .irbrc
IRB.conf[:PROMPT][:MY_PROMPT] = { # name of prompt mode
  :AUTO_INDENT => false,          # disables auto-indent mode
  :PROMPT_I =>  ">> ",		# simple prompt
  :PROMPT_S => nil,		# prompt for continuated strings
  :PROMPT_C => nil,		# prompt for continuated statement
  :RETURN => "    ==>%s\n"	# format to return value
}
IRB.conf[:PROMPT_MODE] = :MY_PROMPTOr, invoke irb with the above prompt mode by:
irb --prompt my-promptConstants PROMPT_I, PROMPT_S and PROMPT_C specify the format. In the prompt specification, some special strings are available:
%N    # command name which is running
%m    # to_s of main object (self)
%M    # inspect of main object (self)
%l    # type of string(", ', /, ]), `]' is inner %w[...]
%NNi  # indent level. NN is digits and means as same as printf("%NNd").
      # It can be omitted
%NNn  # line number.
%%    # %For instance, the default prompt mode is defined as follows:
IRB.conf[:PROMPT_MODE][: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" # used to printf
}irb comes with a number of available modes:
# :NULL:
#   :PROMPT_I:
#   :PROMPT_N:
#   :PROMPT_S:
#   :PROMPT_C:
#   :RETURN: |
#     %s
# :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
# :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
# :SIMPLE:
#   :PROMPT_I: ! '>> '
#   :PROMPT_N: ! '>> '
#   :PROMPT_S:
#   :PROMPT_C: ! '?> '
#   :RETURN: |
#     => %s
# :INF_RUBY:
#   :PROMPT_I: ! '%N(%m):%03n:%i> '
#   :PROMPT_N:
#   :PROMPT_S:
#   :PROMPT_C:
#   :RETURN: |
#     %s
#   :AUTO_INDENT: true
# :XMP:
#   :PROMPT_I:
#   :PROMPT_N:
#   :PROMPT_S:
#   :PROMPT_C:
#   :RETURN: |2
#         ==>%sRestrictions
Because irb evaluates input immediately after it is syntactically complete, the results may be slightly different than directly using Ruby.
IRB Sessions
IRB has a special feature, that allows you to manage many sessions at once.
You can create new sessions with Irb.irb, and get a list of current sessions with the jobs command in the prompt.
Commands
JobManager provides commands to handle the current sessions:
jobs    # List of current sessions
fg      # Switches to the session of the given number
kill    # Kills the session with the given numberThe exit command, or .irb_exit, will quit the current session and call any exit hooks with .irb_at_exit.
A few commands for loading files within the session are also available:
- source
- 
Loads a given file in the current session and displays the source lines, see IrbLoader#source_file 
- irb_load
- 
Loads the given file similarly to Kernel#load, see IrbLoader#irb_load 
- irb_require
- 
Loads the given file similarly to Kernel#require 
Configuration
The command line options, or .conf, specify the default behavior of Irb.irb.
On the other hand, each conf in IRB@Command+line+options is used to individually configure .irb.
If a proc is set for IRB.conf[:IRB_RC], its will be invoked after execution of that proc with the context of the current session as its argument. Each session can be configured using this mechanism.
Session variables
There are a few variables in every Irb session that can come in handy:
- _
- 
The value command executed, as a local variable 
- __
- 
The history of evaluated commands. Available only if IRB.conf[:EVAL_HISTORY]is notnil(which is the default). See also IRB::Context#eval_history= and IRB::History.
- __[line_no]
- 
Returns the evaluation value at the given line number, line_no. Ifline_nois a negative, the return valueline_nomany lines before the most recent return value.
Example using IRB Sessions
# invoke a new session
irb(main):001:0> irb
# list open sessions
irb(main):001:0> jobs
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
  #1->irb#1 on main (#<Thread:0x40125d64> : running)
# change the active session
irb(main):002:0> fg 0
# define class Foo in top-level session
irb(main):002:0> class Foo;end
# invoke a new session with the context of Foo
irb(main):003:0> irb Foo
# define Foo#foo
irb(Foo):001:0> def foo
irb(Foo):002:1>   print 1
irb(Foo):003:1> end
# change the active session
irb(Foo):004:0> fg 0
# list open sessions
irb(main):004:0> jobs
  #0->irb on main (#<Thread:0x400fb7e4> : running)
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
# check if Foo#foo is available
irb(main):005:0> Foo.instance_methods #=> [:foo, ...]
# change the active session
irb(main):006:0> fg 2
# define Foo#bar in the context of Foo
irb(Foo):005:0> def 
irb(Foo):006:1>  print "bar"
irb(Foo):007:1> end
irb(Foo):010:0>  Foo.instance_methods #=> [:bar, :foo, ...]
# change the active session
irb(Foo):011:0> fg 0
irb(main):007:0> f = Foo.new  #=> #<Foo:0x4010af3c>
# invoke a new session with the context of f (instance of Foo)
irb(main):008:0> irb f
# list open sessions
irb(<Foo:0x4010af3c>):001:0> jobs
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
  #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
# evaluate f.foo
irb(<Foo:0x4010af3c>):002:0> foo #=> 1 => nil
# evaluate f.bar
irb(<Foo:0x4010af3c>):003:0>  #=> bar => nil
# kill jobs 1, 2, and 3
irb(<Foo:0x4010af3c>):004:0> kill 1, 2, 3
# list open sessions, should only include main session
irb(main):009:0> jobs
  #0->irb on main (#<Thread:0x400fb7e4> : running)
# quit irb
irb(main):010:0> exitConstant Summary
- 
    IRBRC_EXT =
    Internal use only
    
 # File 'lib/irb/init.rb', line 348"rc"
- 
    STDIN_FILE_NAME =
    Internal use only
    
 # File 'lib/irb/input-method.rb', line 20"(line)"
- 
    TOPLEVEL_BINDING =
    
 # File 'lib/irb/workspace.rb', line 15binding
- 
    VERSION =
    Internal use only
    
 # File 'lib/irb/version.rb', line 14"1.4.1"
Class Method Summary
- 
    
      .conf  
    
    Displays current configuration. 
- CurrentContext
- .default_src_encoding
- .easter_egg(type = nil)
- 
    
      .initialize_tracer  
    
    initialize tracing function. 
- .inspect
- 
    
      .irb(file = nil, *main)  
    
    Creates a new IRBsession, see Irb.new.
- 
    
      .irb_abort(irb, exception = Abort)  
    
    Aborts then interrupts irb. 
- 
    
      .irb_at_exit  
    
    Calls each event hook of IRB.conf[:AT_EXIT]when the current session quits.
- 
    
      .irb_exit(irb, ret)  
    
    Quits irb. 
- 
    
      JobManager  
    
    The current JobManagerin the session.
- 
    
      .print_usage  
    
    Outputs the irb help message, see IRB@Command+line+options. 
- 
    
      .start(ap_path = nil)  
    
    Initializes IRB and creates a new Irb.irbobject at the TOPLEVEL_BINDING
- 
    
      .version  
    
    Returns the current version of IRB, including release version and last updated date.
- .delete_caller Internal use only
- .init_config(ap_path) Internal use only
- .init_error Internal use only
- 
    
      Inspector(inspect, init = nil)  
    
    Internal use only
    Convenience method to create a new Inspector, using the given .inspect proc, and optionalinitproc and passes them to Inspector.new
- 
    
      .load_modules  
    
    Internal use only
    loading modules. 
- 
    
      .parse_opts(argv: ::ARGV)  
    
    Internal use only
    option analyzing. 
- .rc_file(ext = IRBRC_EXT) Internal use only
- 
    
      .rc_file_generators {|proc{|rc| current_dir+"/.config/irb/irb#{rc}"}| ... } 
    
    Internal use only
    enumerate possible rc-file base name generators. 
- 
    
      .run_config  
    
    Internal use only
    running config. 
- .set_measure_callback(type = nil, arg = nil, &block) Internal use only
- 
    
      .setup(ap_path, argv: ::ARGV)  
    
    Internal use only
    initialize config. 
- .unset_measure_callback(type = nil) Internal use only
- .set_encoding(extern, intern = nil, override: true) private Internal use only
Class Method Details
.conf
Displays current configuration.
Modifying the configuration is achieved by sending a message to conf.
See IRB@Configuration for more information.
# File 'lib/irb.rb', line 386
def IRB.conf @CONF end
CurrentContext
The current ::IRB::Context of the session, see .conf
irb
irb(main):001:0> IRB.CurrentContext.irb_name = "foo"
foo(main):002:0> IRB.conf[:MAIN_CONTEXT].irb_name #=> "foo"See additional method definition at file lib/irb.rb line 403.
# File 'lib/irb/ext/multi-irb.rb', line 181
def IRB.CurrentContext IRB.conf[:MAIN_CONTEXT] end
.default_src_encoding
[ GitHub ]# File 'lib/irb/src_encoding.rb', line 4
def self.default_src_encoding return __ENCODING__ end
.delete_caller
# File 'lib/irb/workspace.rb', line 184
def IRB.delete_caller end
.easter_egg(type = nil)
[ GitHub ]# File 'lib/irb/easter-egg.rb', line 101
private def easter_egg(type = nil) type ||= [:logo, :dancing].sample case type when :logo File.open(File.join(__dir__, 'ruby_logo.aa')) do |f| require "rdoc" RDoc::RI::Driver.new.page do |io| IO.copy_stream(f, io) end end when :dancing begin canvas = Canvas.new(Reline.get_screen_size) Reline::IOGate.set_winch_handler do canvas = Canvas.new(Reline.get_screen_size) end ruby_model = RubyModel.new print "\e[?1049h" 0.step do |i| # TODO (0..).each needs Ruby 2.6 or later buff = canvas.draw do ruby_model.render_frame(i) do |p1, p2| canvas.line(p1, p2) end end buff[0, 20] = "\e[0mPress Ctrl+C to stop\e[31m\e[1m" print "\e[H" + buff sleep 0.05 end rescue Interrupt ensure print "\e[0m\e[?1049l" end end end
.init_config(ap_path)
# File 'lib/irb/init.rb', line 29
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[:USE_SINGLELINE] = false unless defined?(ReadlineInputMethod) @CONF[:USE_COLORIZE] = !ENV['NO_COLOR'] @CONF[:USE_AUTOCOMPLETE] = true @CONF[:INSPECT_MODE] = true @CONF[:USE_TRACER] = false @CONF[:USE_LOADER] = false @CONF[:IGNORE_SIGINT] = true @CONF[:IGNORE_EOF] = false @CONF[:EXTRA_DOC_DIRS] = [] @CONF[:ECHO] = nil @CONF[:ECHO_ON_ASSIGNMENT] = nil @CONF[:VERBOSE] = nil @CONF[:EVAL_HISTORY] = nil @CONF[:SAVE_HISTORY] = 1000 @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 => "%l> ", :PROMPT_C => "?> ", :RETURN => "=> %s\n" }, :INF_RUBY => { :PROMPT_I => "%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] = true @CONF[:CONTEXT_MODE] = 4 # use a copy of TOPLEVEL_BINDING @CONF[:SINGLE_IRB] = false @CONF[:MEASURE] = false @CONF[:MEASURE_PROC] = {} @CONF[:MEASURE_PROC][:TIME] = proc { |context, code, line_no, &block| time = Time.now result = block.() now = Time.now puts 'processing time: %fs' % (now - time) if IRB.conf[:MEASURE] result } # arg can be either a symbol for the mode (:cpu, :wall, ..) or a hash for # a more complete configuration. # See https://github.com/tmm1/stackprof#all-options. @CONF[:MEASURE_PROC][:STACKPROF] = proc { |context, code, line_no, arg, &block| return block.() unless IRB.conf[:MEASURE] success = false begin require 'stackprof' success = true rescue LoadError puts 'Please run "gem install stackprof" before measuring by StackProf.' end if success result = nil arg = { mode: arg || :cpu } unless arg.is_a?(Hash) stackprof_result = StackProf.run(**arg) do result = block.() end case stackprof_result when File puts "StackProf report saved to #{stackprof_result.path}" when Hash StackProf::Report.new(stackprof_result).print_text else puts "Stackprof ran with #{arg.inspect}" end result else block.() end } @CONF[:MEASURE_CALLBACKS] = [] @CONF[:LC_MESSAGES] = Locale.new @CONF[:AT_EXIT] = [] end
.init_error
# File 'lib/irb/init.rb', line 208
def IRB.init_error @CONF[:LC_MESSAGES].load("irb/error.rb") end
.initialize_tracer
initialize tracing function
# File 'lib/irb/ext/tracer.rb', line 30
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
.inspect
[ GitHub ]# File 'lib/irb.rb', line 889
def @CONF.inspect IRB.version unless self[:VERSION] array = [] for k, v in sort{|a1, a2| a1[0].id2name <=> a2[0].id2name} case k when :MAIN_CONTEXT, :__TMP__EHV__ array.push format("CONF[:%s]=...myself...", k.id2name) when :PROMPT s = v.collect{ |kk, vv| ss = vv.collect{|kkk, vvv| ":#{kkk.id2name}=>#{vvv.inspect}"} format(":%s=>{%s}", kk.id2name, ss.join(", ")) } array.push format("CONF[:%s]={%s}", k.id2name, s.join(", ")) else array.push format("CONF[:%s]=%s", k.id2name, v.inspect) end end array.join("\n") end
Inspector(inspect, init = nil)
Convenience method to create a new ::IRB::Inspector, using the given .inspect proc, and optional init proc and passes them to Inspector.new
irb(main):001:0> ins = IRB::Inspector(proc{ |v| "omg! #{v}" })
irb(main):001:0> IRB.CurrentContext.inspect_mode = ins # => omg! #<IRB::Inspector:0x007f46f7ba7d28>
irb(main):001:0> "what?" #=> omg! what?.irb(file = nil, *main)
Creates a new IRB session, see Irb.new.
The optional file argument is given to Context.new, along with the workspace created with the remaining arguments, see WorkSpace.new
# File 'lib/irb/ext/multi-irb.rb', line 189
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)
Aborts then interrupts irb.
Will raise an ::IRB::Abort exception, or the given exception.
.irb_at_exit
Calls each event hook of IRB.conf[:AT_EXIT] when the current session quits.
# File 'lib/irb.rb', line 423
def IRB.irb_at_exit @CONF[:AT_EXIT].each{|hook| hook.call} end
.irb_exit(irb, ret)
Quits irb
# File 'lib/irb.rb', line 428
def IRB.irb_exit(irb, ret) throw :IRB_EXIT, ret end
JobManager
The current ::IRB::JobManager in the session
# File 'lib/irb/ext/multi-irb.rb', line 176
def IRB.JobManager @JobManager end
.load_modules
loading modules
# File 'lib/irb/init.rb', line 392
def IRB.load_modules for m in @CONF[:LOAD_MODULES] begin require m rescue LoadError => err warn "#{err.class}: #{err}", uplevel: 0 end end end
.parse_opts(argv: ::ARGV)
option analyzing
# File 'lib/irb/init.rb', line 213
def IRB.parse_opts(argv: ::ARGV) load_path = [] while opt = argv.shift case opt when "-f" @CONF[:RC] = false when "-d" $DEBUG = true $VERBOSE = true when "-w" Warning[:deprecated] = $VERBOSE = true when /^-W(.+)?/ opt = $1 || argv.shift case opt when "0" $VERBOSE = nil when "1" $VERBOSE = false else Warning[:deprecated] = $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 "--singleline", "--readline", "--legacy" @CONF[:USE_SINGLELINE] = true when "--nosingleline", "--noreadline" @CONF[:USE_SINGLELINE] = false when "--multiline", "--reidline" @CONF[:USE_MULTILINE] = true when "--nomultiline", "--noreidline" @CONF[:USE_MULTILINE] = false when /^--extra-doc-dir(?:=(.+))?/ opt = $1 || argv.shift @CONF[:EXTRA_DOC_DIRS] << opt when "--echo" @CONF[:ECHO] = true when "--noecho" @CONF[:ECHO] = false when "--echo-on-assignment" @CONF[:ECHO_ON_ASSIGNMENT] = true when "--noecho-on-assignment" @CONF[:ECHO_ON_ASSIGNMENT] = false when "--truncate-echo-on-assignment" @CONF[:ECHO_ON_ASSIGNMENT] = :truncate when "--verbose" @CONF[:VERBOSE] = true when "--noverbose" @CONF[:VERBOSE] = false when "--colorize" @CONF[:USE_COLORIZE] = true when "--nocolorize" @CONF[:USE_COLORIZE] = false when "--autocomplete" @CONF[:USE_AUTOCOMPLETE] = true when "--noautocomplete" @CONF[:USE_AUTOCOMPLETE] = 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 "-v", "--version" print IRB.version, "\n" exit 0 when "-h", "--help" require_relative "help" IRB.print_usage exit 0 when "--" if opt = argv.shift @CONF[:SCRIPT] = opt $0 = opt end break when /^-/ fail UnrecognizedSwitch, opt else @CONF[:SCRIPT] = opt $0 = opt break end end load_path.collect! do |path| /\A\.\// =~ path ? path : File.(path) end $LOAD_PATH.unshift(*load_path) end
.print_usage
Outputs the irb help message, see IRB@Command+line+options.
# File 'lib/irb/help.rb', line 17
def IRB.print_usage lc = IRB.conf[:LC_MESSAGES] path = lc.find("irb/help-message") space_line = false IRB::MagicFile.open(path){|f| f.each_line do |l| if /^\s*$/ =~ l lc.puts l unless space_line space_line = true next end space_line = false l.sub!(/#.*$/, "") next if /^\s*$/ =~ l lc.puts l end } end
.rc_file(ext = IRBRC_EXT)
# File 'lib/irb/init.rb', line 349
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 case rc_file = @CONF[:RC_NAME_GENERATOR].call(ext) when String return rc_file else fail IllegalRCNameGenerator end end
.rc_file_generators {|proc{|rc| current_dir+"/.config/irb/irb#{rc}"}| ... }
enumerate possible rc-file base name generators
# File 'lib/irb/init.rb', line 368
def IRB.rc_file_generators if irbrc = ENV["IRBRC"] yield proc{|rc| rc == "rc" ? irbrc : irbrc+rc} end if xdg_config_home = ENV["XDG_CONFIG_HOME"] irb_home = File.join(xdg_config_home, "irb") unless File.exist? irb_home require 'fileutils' FileUtils.mkdir_p irb_home end yield proc{|rc| irb_home + "/irb#{rc}"} end if home = ENV["HOME"] yield proc{|rc| home+"/.irb#{rc}"} end current_dir = Dir.pwd yield proc{|rc| current_dir+"/.config/irb/irb#{rc}"} yield proc{|rc| current_dir+"/.irb#{rc}"} yield proc{|rc| current_dir+"/irb#{rc.sub(/\A_?/, '.')}"} yield proc{|rc| current_dir+"/_irb#{rc}"} yield proc{|rc| current_dir+"/$irb#{rc}"} end
.run_config
running config
.set_encoding(extern, intern = nil, override: true) (private)
# File 'lib/irb/init.rb', line 406
def set_encoding(extern, intern = nil, override: true) verbose, $VERBOSE = $VERBOSE, nil Encoding.default_external = extern unless extern.nil? || extern.empty? Encoding.default_internal = intern unless intern.nil? || intern.empty? [$stdin, $stdout, $stderr].each do |io| io.set_encoding(extern, intern) end if override @CONF[:LC_MESSAGES].instance_variable_set(:@override_encoding, extern) else @CONF[:LC_MESSAGES].instance_variable_set(:@encoding, extern) end ensure $VERBOSE = verbose end
.set_measure_callback(type = nil, arg = nil, &block)
# File 'lib/irb/init.rb', line 163
def IRB.set_measure_callback(type = nil, arg = nil, &block) added = nil if type type_sym = type.upcase.to_sym if IRB.conf[:MEASURE_PROC][type_sym] added = [type_sym, IRB.conf[:MEASURE_PROC][type_sym], arg] end elsif IRB.conf[:MEASURE_PROC][:CUSTOM] added = [:CUSTOM, IRB.conf[:MEASURE_PROC][:CUSTOM], arg] elsif block_given? added = [:BLOCK, block, arg] found = IRB.conf[:MEASURE_CALLBACKS].find{ |m| m[0] == added[0] && m[2] == added[2] } if found found[1] = block return added else IRB.conf[:MEASURE_CALLBACKS] << added return added end else added = [:TIME, IRB.conf[:MEASURE_PROC][:TIME], arg] end if added found = IRB.conf[:MEASURE_CALLBACKS].find{ |m| m[0] == added[0] && m[2] == added[2] } if found # already added nil else IRB.conf[:MEASURE_CALLBACKS] << added if added added end else nil end end
.setup(ap_path, argv: ::ARGV)
initialize config
# File 'lib/irb/init.rb', line 16
def IRB.setup(ap_path, argv: ::ARGV) IRB.init_config(ap_path) IRB.init_error IRB.parse_opts(argv: argv) IRB.run_config IRB.load_modules unless @CONF[:PROMPT][@CONF[:PROMPT_MODE]] fail UndefinedPromptMode, @CONF[:PROMPT_MODE] end end
.start(ap_path = nil)
Initializes IRB and creates a new Irb.irb object at the TOPLEVEL_BINDING
.unset_measure_callback(type = nil)
.version
Returns the current version of IRB, including release version and last updated date.