mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* lib/irb*: merge doc from doc/irb/ird.rd and improve overall
documentation of IRB * doc/irb/irb.rd: remove stale documentation git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38358 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									0ac361f540
								
							
						
					
					
						commit
						8983315238
					
				
					 29 changed files with 432 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,9 @@
 | 
			
		|||
Thu Dec 13 14:20:00 2012  Zachary Scott  <zachary@zacharyscott.net>
 | 
			
		||||
 | 
			
		||||
	* lib/irb*: merge doc from doc/irb/ird.rd and improve overall
 | 
			
		||||
	  documentation of IRB
 | 
			
		||||
	* doc/irb/irb.rd: remove stale documentation
 | 
			
		||||
 | 
			
		||||
Thu Dec 13 14:10:00 2012  Shugo Maeda  <shugo@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* marshal.c (r_entry0): don't taint classes and modules because
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										264
									
								
								lib/irb.rb
									
										
									
									
									
								
							
							
						
						
									
										264
									
								
								lib/irb.rb
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -21,14 +21,272 @@ require "irb/locale"
 | 
			
		|||
 | 
			
		||||
STDOUT.sync = true
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
#     #=> nil
 | 
			
		||||
#
 | 
			
		||||
# The Readline extension module can be used with irb. Use of Readline is
 | 
			
		||||
# default if it's installed.
 | 
			
		||||
#
 | 
			
		||||
# == Command line options
 | 
			
		||||
#
 | 
			
		||||
#   Usage:  irb.rb [options] [programfile] [arguments]
 | 
			
		||||
#     -f                Suppress read of ~/.irbrc
 | 
			
		||||
#     -m                Bc mode (load mathn, fraction or matrix are available)
 | 
			
		||||
#     -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`
 | 
			
		||||
#     --inspect         Use `inspect' for output (default except for bc mode)
 | 
			
		||||
#     --noinspect       Don't use inspect for output
 | 
			
		||||
#     --readline        Use Readline extension module
 | 
			
		||||
#     --noreadline      Don't use Readline extension module
 | 
			
		||||
#     --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 --readline.
 | 
			
		||||
#     --simple-prompt   Simple prompt mode
 | 
			
		||||
#     --noprompt        No prompt mode
 | 
			
		||||
#     --tracer          Display trace for each execution of commands.
 | 
			
		||||
#     --back-trace-limit n
 | 
			
		||||
#                       Display backtrace top n and tail n. The default
 | 
			
		||||
#                       value is 16.
 | 
			
		||||
#     --irb_debug n     Set internal debug level to n (not for popular use)
 | 
			
		||||
#     -v, --version     Print the version of irb
 | 
			
		||||
#
 | 
			
		||||
# == Configuration
 | 
			
		||||
#
 | 
			
		||||
# IRB reads from <code>~/.irbrc</code> when it's invoked.
 | 
			
		||||
#
 | 
			
		||||
# If <code>~/.irbrc</code> doesn't exist, +irb+ will try to read in the following order:
 | 
			
		||||
#
 | 
			
		||||
# * +.irbrc+
 | 
			
		||||
# * +irb.rc+
 | 
			
		||||
# * +_irbrc+
 | 
			
		||||
# * <code>$irbrc</code>
 | 
			
		||||
#
 | 
			
		||||
# 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[:MATH_MODE]=false
 | 
			
		||||
#     IRB.conf[:INSPECT_MODE]=nil
 | 
			
		||||
#     IRB.conf[:IRB_RC] = nil
 | 
			
		||||
#     IRB.conf[:BACK_TRACE_LIMIT]=16
 | 
			
		||||
#     IRB.conf[:USE_LOADER] = false
 | 
			
		||||
#     IRB.conf[:USE_READLINE] = nil
 | 
			
		||||
#     IRB.conf[:USE_TRACER] = false
 | 
			
		||||
#     IRB.conf[:IGNORE_SIGINT] = true
 | 
			
		||||
#     IRB.conf[:IGNORE_EOF] = false
 | 
			
		||||
#     IRB.conf[:PROMPT_MODE] = :DEFALUT
 | 
			
		||||
#     IRB.conf[:PROMPT] = {...}
 | 
			
		||||
#     IRB.conf[:DEBUG_LEVEL]=0
 | 
			
		||||
#
 | 
			
		||||
# == 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
 | 
			
		||||
#       :PROMPT_I => nil,		# normal prompt
 | 
			
		||||
#       :PROMPT_S => nil,		# prompt for continuated strings
 | 
			
		||||
#       :PROMPT_C => nil,		# prompt for continuated statement
 | 
			
		||||
#       :RETURN => "    ==>%s\n"	# format to return value
 | 
			
		||||
#     }
 | 
			
		||||
#
 | 
			
		||||
# Then, invoke irb with the above prompt mode by:
 | 
			
		||||
#
 | 
			
		||||
#     irb --prompt my-prompt
 | 
			
		||||
#
 | 
			
		||||
# Or, add the following in your +.irbrc+:
 | 
			
		||||
#
 | 
			
		||||
#     IRB.conf[:PROMPT_MODE] = :MY_PROMPT
 | 
			
		||||
#
 | 
			
		||||
# Contants +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 degits and means as same as printf("%NNd").
 | 
			
		||||
#           # It can be ommited
 | 
			
		||||
#     %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_S => "%N(%m):%03n:%i%l ",
 | 
			
		||||
#       :PROMPT_C => "%N(%m):%03n:%i* ",
 | 
			
		||||
#       :RETURN => "%s\n" # used to printf
 | 
			
		||||
#     }
 | 
			
		||||
#
 | 
			
		||||
# == Restrictions
 | 
			
		||||
#
 | 
			
		||||
# Because irb evaluates input immediately after it is syntactically complete,
 | 
			
		||||
# the results may be slightly different than directly using ruby.
 | 
			
		||||
#
 | 
			
		||||
# One of the obvious differences is how irb handles symbols as continuated
 | 
			
		||||
# statements:
 | 
			
		||||
#
 | 
			
		||||
#   ruby -e 'p :+' #=> :+
 | 
			
		||||
#   irb
 | 
			
		||||
#   irb(main):001:0> p :+
 | 
			
		||||
#   irb(main):002:0*
 | 
			
		||||
#
 | 
			
		||||
# irb tries to contiue the statement 'p :+' on the next line.
 | 
			
		||||
#
 | 
			
		||||
# == 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 number
 | 
			
		||||
#
 | 
			
		||||
# The +exit+ command, or ::irb_exit, will quit the current session and call any
 | 
			
		||||
# exit hooks with IRB.irb_at_exit.
 | 
			
		||||
#
 | 
			
		||||
# A few commands for loading files within the session are also available:
 | 
			
		||||
#
 | 
			
		||||
# +source+::
 | 
			
		||||
#   Loads a given file in the current session, 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 IRB.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.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:
 | 
			
		||||
#
 | 
			
		||||
# <code>_</code>::
 | 
			
		||||
#   The value command executed, as a local variable
 | 
			
		||||
# <code>__</code>::
 | 
			
		||||
#   The history of evaluated commands
 | 
			
		||||
# <code>__[line_no]</code>::
 | 
			
		||||
#   Returns the evaluation value at the given line number, +line_no+.
 | 
			
		||||
#   If +line_no+ is a negative, the return value +line_no+ many lines before
 | 
			
		||||
#   the most recent return value.
 | 
			
		||||
#
 | 
			
		||||
# === Example using IRB Sessions
 | 
			
		||||
#
 | 
			
		||||
#   # invoke a new session
 | 
			
		||||
#   irb(main):001:0> irb
 | 
			
		||||
#   # list open sessions
 | 
			
		||||
#   irb.1(main):001:0> jobs
 | 
			
		||||
#     #0->irb on main (#<Thread:0x400fb7e4> : stop)
 | 
			
		||||
#     #1->irb#1 on main (#<Thread:0x40125d64> : running)
 | 
			
		||||
#
 | 
			
		||||
#   # change the active session
 | 
			
		||||
#   irb.1(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.2(Foo):001:0> def foo
 | 
			
		||||
#   irb.2(Foo):002:1>   print 1
 | 
			
		||||
#   irb.2(Foo):003:1> end
 | 
			
		||||
#
 | 
			
		||||
#   # change the active session
 | 
			
		||||
#   irb.2(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 sesssion
 | 
			
		||||
#   irb(main):006:0> fg 2
 | 
			
		||||
#   # define Foo#bar in the context of Foo
 | 
			
		||||
#   irb.2(Foo):005:0> def bar
 | 
			
		||||
#   irb.2(Foo):006:1>  print "bar"
 | 
			
		||||
#   irb.2(Foo):007:1> end
 | 
			
		||||
#   irb.2(Foo):010:0>  Foo.instance_methods #=> [:bar, :foo, ...]
 | 
			
		||||
#
 | 
			
		||||
#   # change the active session
 | 
			
		||||
#   irb.2(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.3(<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.3(<Foo:0x4010af3c>):002:0> foo #=> 1 => nil
 | 
			
		||||
#   # evaluate f.bar
 | 
			
		||||
#   irb.3(<Foo:0x4010af3c>):003:0> bar #=> bar => nil
 | 
			
		||||
#   # kill jobs 1, 2, and 3
 | 
			
		||||
#   irb.3(<Foo:0x4010af3c>):004:0> kill 1, 2, 3
 | 
			
		||||
#   # list open sesssions, should only include main session
 | 
			
		||||
#   irb(main):009:0> jobs
 | 
			
		||||
#     #0->irb on main (#<Thread:0x400fb7e4> : running)
 | 
			
		||||
#   # quit irb
 | 
			
		||||
#   irb(main):010:0> exit
 | 
			
		||||
module IRB
 | 
			
		||||
  @RCS_ID='-$Id$-'
 | 
			
		||||
 | 
			
		||||
  class Abort < Exception;end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  @CONF = {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  # Displays current configuration.
 | 
			
		||||
  #
 | 
			
		||||
  # Modifing the configuration is achieved by sending a message to IRB.conf.
 | 
			
		||||
  def IRB.conf
 | 
			
		||||
    @CONF
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -75,10 +333,12 @@ module IRB
 | 
			
		|||
#    print "\n"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Calls each of the IRB.conf[:AT_EXIT] hooks when the current session quits.
 | 
			
		||||
  def IRB.irb_at_exit
 | 
			
		||||
    @CONF[:AT_EXIT].each{|hook| hook.call}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Quits irb
 | 
			
		||||
  def IRB.irb_exit(irb, ret)
 | 
			
		||||
    throw :IRB_EXIT, ret
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -91,9 +351,7 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #
 | 
			
		||||
  # irb interpreter main routine
 | 
			
		||||
  #
 | 
			
		||||
  class Irb
 | 
			
		||||
    def initialize(workspace = nil, input_method = nil, output_method = nil)
 | 
			
		||||
      @context = Context.new(self, workspace, input_method, output_method)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
require "irb/cmd/nop.rb"
 | 
			
		||||
require "irb/ext/change-ws.rb"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -29,4 +30,4 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@
 | 
			
		|||
 | 
			
		||||
@RCS_ID='-$Id$-'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
    class Fork<Nop
 | 
			
		||||
| 
						 | 
				
			
			@ -34,5 +34,6 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@ require 'rdoc/ri/driver'
 | 
			
		|||
 | 
			
		||||
require "irb/cmd/nop.rb"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
    class Help<Nop
 | 
			
		||||
| 
						 | 
				
			
			@ -37,3 +38,4 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
require "irb/cmd/nop.rb"
 | 
			
		||||
require "irb/ext/loader"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
    class Load<Nop
 | 
			
		||||
| 
						 | 
				
			
			@ -64,3 +65,4 @@ module IRB
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
    class Nop
 | 
			
		||||
| 
						 | 
				
			
			@ -35,4 +36,4 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
require "irb/cmd/nop.rb"
 | 
			
		||||
require "irb/ext/workspaces.rb"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
    class Workspaces<Nop
 | 
			
		||||
| 
						 | 
				
			
			@ -35,4 +36,5 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,7 @@
 | 
			
		|||
require "irb/cmd/nop.rb"
 | 
			
		||||
require "irb/ext/multi-irb"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  module ExtendCommand
 | 
			
		||||
    class IrbCommand<Nop
 | 
			
		||||
| 
						 | 
				
			
			@ -38,3 +39,4 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,12 +13,13 @@ require "irb/inspector"
 | 
			
		|||
 | 
			
		||||
module IRB
 | 
			
		||||
  class Context
 | 
			
		||||
    # Creates a new IRB context.
 | 
			
		||||
    #
 | 
			
		||||
    # Arguments:
 | 
			
		||||
    #   input_method: nil -- stdin or readline
 | 
			
		||||
    #		      String -- File
 | 
			
		||||
    #		      other -- using this as InputMethod
 | 
			
		||||
    # The optional +input_method+ argument:
 | 
			
		||||
    #
 | 
			
		||||
    # +nil+::     uses stdin or Readline
 | 
			
		||||
    # +String+::  uses a File
 | 
			
		||||
    # +other+::   uses this as InputMethod
 | 
			
		||||
    def initialize(irb, workspace = nil, input_method = nil, output_method = nil)
 | 
			
		||||
      @irb = irb
 | 
			
		||||
      if workspace
 | 
			
		||||
| 
						 | 
				
			
			@ -116,31 +117,69 @@ module IRB
 | 
			
		|||
    attr_accessor :irb_name
 | 
			
		||||
    attr_accessor :irb_path
 | 
			
		||||
 | 
			
		||||
    # Whether +Readline+ is enabled or not.
 | 
			
		||||
    #
 | 
			
		||||
    # See #use_readline= for more information.
 | 
			
		||||
    attr_reader :use_readline
 | 
			
		||||
    attr_reader :inspect_mode
 | 
			
		||||
 | 
			
		||||
    attr_reader :prompt_mode
 | 
			
		||||
    # Standard IRB prompt
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Customizing+the+IRB+Prompt for more information.
 | 
			
		||||
    attr_accessor :prompt_i
 | 
			
		||||
    # IRB prompt for continuated strings
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Customizing+the+IRB+Prompt for more information.
 | 
			
		||||
    attr_accessor :prompt_s
 | 
			
		||||
    # IRB prompt for continuated statement (e.g. immediately after an +if+)
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Customizing+the+IRB+Prompt for more information.
 | 
			
		||||
    attr_accessor :prompt_c
 | 
			
		||||
    # See IRB@Customizing+the+IRB+Prompt for more information.
 | 
			
		||||
    attr_accessor :prompt_n
 | 
			
		||||
    attr_accessor :auto_indent_mode
 | 
			
		||||
    attr_accessor :return_format
 | 
			
		||||
 | 
			
		||||
    # Whether <code>^C</code> (+control-c+) will be ignored or not.
 | 
			
		||||
    #
 | 
			
		||||
    # If set to +false+, <code>^C</code> will quit irb.
 | 
			
		||||
    #
 | 
			
		||||
    # If set to +true+,
 | 
			
		||||
    #
 | 
			
		||||
    # * during input:   cancel input then return to top level.
 | 
			
		||||
    # * during execute: abandon current execution.
 | 
			
		||||
    attr_accessor :ignore_sigint
 | 
			
		||||
    # Whether <code>^D</code> (+control-d+) will be ignored or not.
 | 
			
		||||
    #
 | 
			
		||||
    # If set to +false+, <code>^D</code> will quit irb.
 | 
			
		||||
    attr_accessor :ignore_eof
 | 
			
		||||
    attr_accessor :echo
 | 
			
		||||
    # Whether verbose messages are displayed or not.
 | 
			
		||||
    attr_accessor :verbose
 | 
			
		||||
    # The debug level of irb
 | 
			
		||||
    #
 | 
			
		||||
    # See #debug_level= for more information.
 | 
			
		||||
    attr_reader :debug_level
 | 
			
		||||
 | 
			
		||||
    # The limit of backtrace lines displayed as top +n+ and tail +n+.
 | 
			
		||||
    #
 | 
			
		||||
    # The default value is 16.
 | 
			
		||||
    #
 | 
			
		||||
    # Can also be set using the +--back-trace-limit+ command line option.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Command+line+options for more command line options.
 | 
			
		||||
    attr_accessor :back_trace_limit
 | 
			
		||||
 | 
			
		||||
    # Alias for #use_readline
 | 
			
		||||
    alias use_readline? use_readline
 | 
			
		||||
    # Alias for #rc
 | 
			
		||||
    alias rc? rc
 | 
			
		||||
    alias ignore_sigint? ignore_sigint
 | 
			
		||||
    alias ignore_eof? ignore_eof
 | 
			
		||||
    alias echo? echo
 | 
			
		||||
 | 
			
		||||
    # Returns whether messages are displayed or not.
 | 
			
		||||
    def verbose?
 | 
			
		||||
      if @verbose.nil?
 | 
			
		||||
	if defined?(ReadlineInputMethod) && @io.kind_of?(ReadlineInputMethod)
 | 
			
		||||
| 
						 | 
				
			
			@ -190,6 +229,17 @@ module IRB
 | 
			
		|||
      @io.class == FileInputMethod
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Specifies the inspect mode with +opt+:
 | 
			
		||||
    #
 | 
			
		||||
    # +true+::  display +inspect+
 | 
			
		||||
    # +false+:: display +to_s+
 | 
			
		||||
    # +nil+::   inspect mode in non-math mode,
 | 
			
		||||
    #           non-inspect mode in math mode
 | 
			
		||||
    #
 | 
			
		||||
    # Can also be set using the +--inspect+ and +--noinspect+ command line
 | 
			
		||||
    # options.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Command+line+options for more command line options.
 | 
			
		||||
    def inspect_mode=(opt)
 | 
			
		||||
 | 
			
		||||
      if i = INSPECTORS[opt]
 | 
			
		||||
| 
						 | 
				
			
			@ -234,11 +284,27 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    # Sets whether or not to use the Readline extension
 | 
			
		||||
    #
 | 
			
		||||
    # +true+::  enables +Readline+
 | 
			
		||||
    # +false+:: disables +Readline+
 | 
			
		||||
    # +nil+::   intends to use +Readline+,
 | 
			
		||||
    #           except for when +inf-ruby-mode+ is active.
 | 
			
		||||
    #
 | 
			
		||||
    # Can also be set using the +--noreadline+ and +--readline+ command line
 | 
			
		||||
    # options.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Command+line+options for more command line options.
 | 
			
		||||
    def use_readline=(opt)
 | 
			
		||||
      @use_readline = opt
 | 
			
		||||
      print "use readline module\n" if @use_readline
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Sets the debug level of irb
 | 
			
		||||
    #
 | 
			
		||||
    # Can also be set using the +--irb_debug+ command line option.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Command+line+options for more command line options.
 | 
			
		||||
    def debug_level=(value)
 | 
			
		||||
      @debug_level = value
 | 
			
		||||
      RubyLex.debug_level = value
 | 
			
		||||
| 
						 | 
				
			
			@ -261,6 +327,7 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
 | 
			
		||||
    alias __exit__ exit
 | 
			
		||||
    # Exits the current session, see IRB.irb_exit
 | 
			
		||||
    def exit(ret = 0)
 | 
			
		||||
      IRB.irb_exit(@irb, ret)
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  class Context
 | 
			
		||||
 | 
			
		||||
    def home_workspace
 | 
			
		||||
| 
						 | 
				
			
			@ -20,6 +20,13 @@ module IRB
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Changes the current workspace to given object or binding.
 | 
			
		||||
    #
 | 
			
		||||
    # If the optional argument is omitted, the workspace will be
 | 
			
		||||
    # #home_workspace which is inherited from +TOPLEVEL_BINDING+ or the main
 | 
			
		||||
    # object, <code>IRB.conf[:MAIN_CONTEXT]</code> when irb was initialized.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB::WorkSpace.new for more information.
 | 
			
		||||
    def change_workspace(*_main)
 | 
			
		||||
      if _main.empty?
 | 
			
		||||
	@workspace = home_workspace
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
 | 
			
		||||
  class Context
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +29,17 @@ module IRB
 | 
			
		|||
      @last_value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # The command result history limit.
 | 
			
		||||
    attr_reader :eval_history
 | 
			
		||||
    # Sets command result history limit.
 | 
			
		||||
    #
 | 
			
		||||
    # +no+ is an Integer or +nil+.
 | 
			
		||||
    #
 | 
			
		||||
    # Returns +no+ of history items if greater than 0.
 | 
			
		||||
    #
 | 
			
		||||
    # If +no+ is 0, the number of history items is unlimited.
 | 
			
		||||
    #
 | 
			
		||||
    # If +no+ is +nil+, execution result history isn't used (default).
 | 
			
		||||
    def eval_history=(no)
 | 
			
		||||
      if no
 | 
			
		||||
	if defined?(@eval_history) && @eval_history
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,8 @@
 | 
			
		|||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  # Raised in the event of an exception in a file loaded from an Irb session
 | 
			
		||||
  class LoadAbort < Exception;end
 | 
			
		||||
 | 
			
		||||
  module IrbLoader
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,9 +12,20 @@ require "mathn"
 | 
			
		|||
 | 
			
		||||
module IRB
 | 
			
		||||
  class Context
 | 
			
		||||
    # Returns whether bc mode is enabled.
 | 
			
		||||
    #
 | 
			
		||||
    # See #math_mode=
 | 
			
		||||
    attr_reader :math_mode
 | 
			
		||||
    # Alias for #math_mode
 | 
			
		||||
    alias math? math_mode
 | 
			
		||||
 | 
			
		||||
    # Sets bc mode, which loads +lib/mathn.rb+ so fractions or matrix are
 | 
			
		||||
    # available.
 | 
			
		||||
    #
 | 
			
		||||
    # Also available as the +-m+ command line option.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB@Command+line+options and the unix manpage <code>bc(1)</code> for
 | 
			
		||||
    # more information.
 | 
			
		||||
    def math_mode=(opt)
 | 
			
		||||
      if @math_mode == true && opt == false
 | 
			
		||||
	IRB.fail CantReturnToNormalMode
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,7 +143,10 @@ module IRB
 | 
			
		|||
    IRB.JobManager.irb(Thread.current).context
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # invoke multi-irb
 | 
			
		||||
  # 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
 | 
			
		||||
  def IRB.irb(file = nil, *main)
 | 
			
		||||
    workspace = WorkSpace.new(*main)
 | 
			
		||||
    parent_thread = Thread.current
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,6 +18,7 @@ class Object
 | 
			
		|||
end
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
  # :stopdoc:
 | 
			
		||||
  module ExtendCommandBundle
 | 
			
		||||
    def irb_load(*opts, &b)
 | 
			
		||||
      ExtendCommand::Load.execute(irb_context, *opts, &b)
 | 
			
		||||
| 
						 | 
				
			
			@ -26,17 +27,25 @@ module IRB
 | 
			
		|||
      ExtendCommand::Require.execute(irb_context, *opts, &b)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  # :startdoc:
 | 
			
		||||
 | 
			
		||||
  class Context
 | 
			
		||||
 | 
			
		||||
    IRB.conf[:USE_LOADER] = false
 | 
			
		||||
 | 
			
		||||
    # Returns whether +irb+'s own file reader method is used by
 | 
			
		||||
    # +load+/+require+ or not.
 | 
			
		||||
    #
 | 
			
		||||
    # This mode is globally affected (irb-wide).
 | 
			
		||||
    def use_loader
 | 
			
		||||
      IRB.conf[:USE_LOADER]
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    alias use_loader? use_loader
 | 
			
		||||
 | 
			
		||||
    # Sets IRB.conf[:USE_LOADER]
 | 
			
		||||
    #
 | 
			
		||||
    # See #use_loader for more information.
 | 
			
		||||
    def use_loader=(opt)
 | 
			
		||||
 | 
			
		||||
      if IRB.conf[:USE_LOADER] != opt
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,13 +9,14 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  class Context
 | 
			
		||||
 | 
			
		||||
    def irb_level
 | 
			
		||||
      workspace_stack.size
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Workspaces in the current stack
 | 
			
		||||
    def workspaces
 | 
			
		||||
      if defined? @workspaces
 | 
			
		||||
	@workspaces
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +25,11 @@ module IRB
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Creates a new workspace with the given object or binding, and appends it
 | 
			
		||||
    # onto the current #workspaces stack.
 | 
			
		||||
    #
 | 
			
		||||
    # See IRB::Context#change_workspace and IRB::WorkSpace.new for more
 | 
			
		||||
    # information.
 | 
			
		||||
    def push_workspace(*_main)
 | 
			
		||||
      if _main.empty?
 | 
			
		||||
	if workspaces.empty?
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +49,10 @@ module IRB
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Removes the last element from the current #workspaces stack and returns
 | 
			
		||||
    # it, or +nil+ if the current workspace stack is empty.
 | 
			
		||||
    #
 | 
			
		||||
    # Also, see #push_workspace.
 | 
			
		||||
    def pop_workspace
 | 
			
		||||
      if workspaces.empty?
 | 
			
		||||
	print "workspace stack empty\n"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  #
 | 
			
		||||
  # IRB extended command
 | 
			
		||||
  #
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +23,9 @@ module IRB
 | 
			
		|||
      irb_context.exit(ret)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Displays current configuration.
 | 
			
		||||
    #
 | 
			
		||||
    # Modifing the configuration is achieved by sending a message to IRB.conf.
 | 
			
		||||
    def irb_context
 | 
			
		||||
      IRB.CurrentContext
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
 | 
			
		||||
  # initialize config
 | 
			
		||||
  def IRB.setup(ap_path)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
 | 
			
		||||
  def IRB::Inspector(inspect, init = nil)
 | 
			
		||||
    Inspector.new(inspect, init)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@
 | 
			
		|||
#
 | 
			
		||||
require "e2mmap"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
 | 
			
		||||
  # exceptions
 | 
			
		||||
| 
						 | 
				
			
			@ -26,4 +27,4 @@ module IRB
 | 
			
		|||
  def_exception :UndefinedPromptMode, "Undefined prompt mode(%s)."
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  class Locale
 | 
			
		||||
    @@legacy_encoding_alias_map = {
 | 
			
		||||
| 
						 | 
				
			
			@ -6,3 +7,4 @@ module IRB
 | 
			
		|||
    }.freeze
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@
 | 
			
		|||
#
 | 
			
		||||
require "e2mmap"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  # exceptions
 | 
			
		||||
  extend Exception2MessageMapper
 | 
			
		||||
| 
						 | 
				
			
			@ -24,4 +25,5 @@ module IRB
 | 
			
		|||
  def_exception :CantChangeBinding, 'バインディング(%s)に変更できません.'
 | 
			
		||||
  def_exception :UndefinedPromptMode, 'プロンプトモード(%s)は定義されていません.'
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
# vim:fileencoding=utf-8
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,7 +8,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  class Locale
 | 
			
		||||
    @RCS_ID='-$Id$-'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@ require "e2mmap"
 | 
			
		|||
require "irb/slex"
 | 
			
		||||
require "irb/ruby-token"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
class RubyLex
 | 
			
		||||
  @RCS_ID='-$Id$-'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1185,3 +1186,4 @@ class RubyLex
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module RubyToken
 | 
			
		||||
  EXPR_BEG = :EXPR_BEG
 | 
			
		||||
  EXPR_MID = :EXPR_MID
 | 
			
		||||
| 
						 | 
				
			
			@ -263,3 +264,4 @@ module RubyToken
 | 
			
		|||
    def_token(*defs)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,7 @@
 | 
			
		|||
require "e2mmap"
 | 
			
		||||
require "irb/notifier"
 | 
			
		||||
 | 
			
		||||
# :stopdoc:
 | 
			
		||||
module IRB
 | 
			
		||||
  class SLex
 | 
			
		||||
    @RCS_ID='-$Id$-'
 | 
			
		||||
| 
						 | 
				
			
			@ -243,6 +244,7 @@ module IRB
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
# :startdoc:
 | 
			
		||||
 | 
			
		||||
if $0 == __FILE__
 | 
			
		||||
  #    Tracer.on
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  @RELEASE_VERSION = "0.9.6"
 | 
			
		||||
  @LAST_UPDATE_DATE = "09/06/30"
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,9 +8,11 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
module IRB
 | 
			
		||||
module IRB # :nodoc:
 | 
			
		||||
  class WorkSpace
 | 
			
		||||
    # create new workspace. set self to main if specified, otherwise
 | 
			
		||||
    # Creates a new workspace.
 | 
			
		||||
    #
 | 
			
		||||
    # set self to main if specified, otherwise
 | 
			
		||||
    # inherit main from TOPLEVEL_BINDING.
 | 
			
		||||
    def initialize(*main)
 | 
			
		||||
      if main[0].kind_of?(Binding)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue