The top-level workspace, see IRB::WorkSpace#main
# File irb/context.rb, line 149 def main @workspace.main end
A class that wraps the current state of the irb session, including the configuration of IRB.conf.
Can be either the default IRB.conf[:AUTO_INDENT]
, or the mode
set by prompt_mode=
To disable auto-indentation in irb:
IRB.conf[:AUTO_INDENT] = false
or
irb_context.auto_indent_mode = false
or
IRB.CurrentContext.auto_indent_mode = false
See Configuration at IRB for more information.
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 Command line options at IRB for more command line options.
Whether to echo the return value to output or not.
Uses IRB.conf[:ECHO]
if available, or defaults to
true
.
puts "hello" # hello #=> nil IRB.CurrentContext.echo = false puts "omg" # omg
Whether to echo the return value to output or not.
Uses IRB.conf[:ECHO]
if available, or defaults to
true
.
puts "hello" # hello #=> nil IRB.CurrentContext.echo = false puts "omg" # omg
Whether to echo for assignment expressions
Uses IRB.conf[:ECHO_ON_ASSIGNMENT]
if available, or defaults
to true
.
a = "omg" #=> omg IRB.CurrentContext.echo_on_assignment = false a = "omg"
Whether to echo for assignment expressions
Uses IRB.conf[:ECHO_ON_ASSIGNMENT]
if available, or defaults
to true
.
a = "omg" #=> omg IRB.CurrentContext.echo_on_assignment = false a = "omg"
The command result history limit. This method is not available until eval_history= was called
with non-nil value (directly or via setting
IRB.conf[:EVAL_HISTORY]
in .irbrc
).
Whether ^C
(control-c
) will be ignored or not.
If set to false
, ^C
will quit irb.
If set to true
,
during input: cancel input then return to top level.
during execute: abandon current execution.
Whether ^C
(control-c
) will be ignored or not.
If set to false
, ^C
will quit irb.
If set to true
,
during input: cancel input then return to top level.
during execute: abandon current execution.
The current input method
Can be either StdioInputMethod, ReadlineInputMethod, ReidlineInputMethod, FileInputMethod or other specified when the
context is created. See ::new for
more # information on input_method
.
Can be either name from IRB.conf[:IRB_NAME]
, or the number of
the current job set by JobManager, such as
irb#2
Whether a newline is put before multiline output.
Uses IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT]
if available,
or defaults to true
.
"abc\ndef" #=> abc def IRB.CurrentContext.newline_before_multiline_output = false "abc\ndef" #=> abc def
Whether a newline is put before multiline output.
Uses IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT]
if available,
or defaults to true
.
"abc\ndef" #=> abc def IRB.CurrentContext.newline_before_multiline_output = false "abc\ndef" #=> abc def
Whether to omit echo for assignment expressions
Uses IRB.conf[:OMIT_ON_ASSIGNMENT]
if available, or defaults
to true
.
a = [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, ... [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] IRB.CurrentContext.omit_on_assignment = false a = [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Whether to omit echo for assignment expressions
Uses IRB.conf[:OMIT_ON_ASSIGNMENT]
if available, or defaults
to true
.
a = [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, ... [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] IRB.CurrentContext.omit_on_assignment = false a = [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [1] * 10 #=> [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
IRB prompt for continuated statement (e.g. immediately after an
if
)
See IRB for more information.
The format of the return statement, set by prompt_mode= using the
:RETURN
of the mode
passed to set the current prompt_mode.
Whether colorization is enabled or not.
A copy of the default IRB.conf[:USE_COLORIZE]
Whether colorization is enabled or not.
A copy of the default IRB.conf[:USE_COLORIZE]
Whether multiline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_MULTILINE]
Whether multiline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_MULTILINE]
Whether singleline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_SINGLELINE]
Whether singleline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_SINGLELINE]
Whether multiline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_MULTILINE]
Whether multiline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_MULTILINE]
Whether singleline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_SINGLELINE]
Whether singleline editor mode is enabled or not.
A copy of the default IRB.conf[:USE_SINGLELINE]
Whether Tracer is used when evaluating statements in this context.
See lib/tracer.rb
for more information.
Creates a new IRB context.
The optional input_method
argument:
nil
uses stdin or Reidline or Readline
String
uses a File
other
uses this as InputMethod
# File irb/context.rb, line 28 def initialize(irb, workspace = nil, input_method = nil) @irb = irb if workspace @workspace = workspace else @workspace = WorkSpace.new end @thread = Thread.current if defined? Thread # copy of default configuration @ap_name = IRB.conf[:AP_NAME] @rc = IRB.conf[:RC] @load_modules = IRB.conf[:LOAD_MODULES] if IRB.conf.has_key?(:USE_SINGLELINE) @use_singleline = IRB.conf[:USE_SINGLELINE] elsif IRB.conf.has_key?(:USE_READLINE) # backward compatibility @use_singleline = IRB.conf[:USE_READLINE] else @use_singleline = nil end if IRB.conf.has_key?(:USE_MULTILINE) @use_multiline = IRB.conf[:USE_MULTILINE] elsif IRB.conf.has_key?(:USE_REIDLINE) # backward compatibility @use_multiline = IRB.conf[:USE_REIDLINE] else @use_multiline = nil end @use_colorize = IRB.conf[:USE_COLORIZE] @verbose = IRB.conf[:VERBOSE] @io = nil self.inspect_mode = IRB.conf[:INSPECT_MODE] self.use_tracer = IRB.conf[:USE_TRACER] if IRB.conf[:USE_TRACER] self.use_loader = IRB.conf[:USE_LOADER] if IRB.conf[:USE_LOADER] self.eval_history = IRB.conf[:EVAL_HISTORY] if IRB.conf[:EVAL_HISTORY] @ignore_sigint = IRB.conf[:IGNORE_SIGINT] @ignore_eof = IRB.conf[:IGNORE_EOF] @back_trace_limit = IRB.conf[:BACK_TRACE_LIMIT] self.prompt_mode = IRB.conf[:PROMPT_MODE] if IRB.conf[:SINGLE_IRB] or !defined?(IRB::JobManager) @irb_name = IRB.conf[:IRB_NAME] else @irb_name = IRB.conf[:IRB_NAME]+"#"+IRB.JobManager.n_jobs.to_s end @irb_path = "(" + @irb_name + ")" case input_method when nil @io = nil case use_multiline? when nil if STDIN.tty? && IRB.conf[:PROMPT_MODE] != :INF_RUBY && !use_singleline? # Both of multiline mode and singleline mode aren't specified. @io = ReidlineInputMethod.new else @io = nil end when false @io = nil when true @io = ReidlineInputMethod.new end unless @io case use_singleline? when nil if (defined?(ReadlineInputMethod) && STDIN.tty? && IRB.conf[:PROMPT_MODE] != :INF_RUBY) @io = ReadlineInputMethod.new else @io = nil end when false @io = nil when true if defined?(ReadlineInputMethod) @io = ReadlineInputMethod.new else @io = nil end else @io = nil end end @io = StdioInputMethod.new unless @io when String @io = FileInputMethod.new(input_method) @irb_name = File.basename(input_method) @irb_path = input_method else @io = input_method end self.save_history = IRB.conf[:SAVE_HISTORY] if IRB.conf[:SAVE_HISTORY] @echo = IRB.conf[:ECHO] if @echo.nil? @echo = true end @echo_on_assignment = IRB.conf[:ECHO_ON_ASSIGNMENT] if @echo_on_assignment.nil? @echo_on_assignment = true end @omit_on_assignment = IRB.conf[:OMIT_ON_ASSIGNMENT] if @omit_on_assignment.nil? @omit_on_assignment = true end @newline_before_multiline_output = IRB.conf[:NEWLINE_BEFORE_MULTILINE_OUTPUT] if @newline_before_multiline_output.nil? @newline_before_multiline_output = true 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,
IRB.conf[:MAIN_CONTEXT]
when irb was initialized.
See IRB::WorkSpace.new for more information.
# File irb/ext/change-ws.rb, line 32 def change_workspace(*_main) if _main.empty? @workspace = home_workspace return main end @workspace = WorkSpace.new(_main[0]) if !(class<<main;ancestors;end).include?(ExtendCommandBundle) main.extend ExtendCommandBundle end end
Sets command result history limit. Default value is set from
IRB.conf[:EVAL_HISTORY]
.
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).
History values are available via __
variable, see IRB::History.
# File irb/ext/history.rb, line 51 def eval_history=(no) if no if defined?(@eval_history) && @eval_history @eval_history_values.size(no) else @eval_history_values = History.new(no) IRB.conf[:__TMP__EHV__] = @eval_history_values @workspace.evaluate(self, "__ = IRB.conf[:__TMP__EHV__]") IRB.conf.delete(:__TMP_EHV__) end else @eval_history_values = nil end @eval_history = no end
Exits the current session, see IRB.irb_exit
# File irb/context.rb, line 468 def exit(ret = 0) IRB.irb_exit(@irb, ret) end
A copy of the default IRB.conf[:HISTORY_FILE]
# File irb/ext/save-history.rb, line 48 def history_file IRB.conf[:HISTORY_FILE] end
Set IRB.conf[:HISTORY_FILE]
to the given hist
.
# File irb/ext/save-history.rb, line 53 def history_file=(hist) IRB.conf[:HISTORY_FILE] = hist end
Inherited from TOPLEVEL_BINDING
.
# File irb/ext/change-ws.rb, line 17 def home_workspace if defined? @home_workspace @home_workspace else @home_workspace = @workspace end end
Whether inspect_mode is set or not, see inspect_mode= for more detail.
# File irb/context.rb, line 386 def inspect? @inspect_mode.nil? or @inspect_mode 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
See IRB::Inspector for more information.
Can also be set using the --inspect
and
--noinspect
command line options.
See Command line options at IRB for more command line options.
# File irb/context.rb, line 409 def inspect_mode=(opt) if i = Inspector::INSPECTORS[opt] @inspect_mode = opt @inspect_method = i i.init else case opt when nil if Inspector.keys_with_inspector(Inspector::INSPECTORS[true]).include?(@inspect_mode) self.inspect_mode = false elsif Inspector.keys_with_inspector(Inspector::INSPECTORS[false]).include?(@inspect_mode) self.inspect_mode = true else puts "Can't switch inspect mode." return end when /^\s*\{.*\}\s*$/ begin inspector = eval "proc#{opt}" rescue Exception puts "Can't switch inspect mode(#{opt})." return end self.inspect_mode = inspector when Proc self.inspect_mode = IRB::Inspector(opt) when Inspector prefix = "usr%d" i = 1 while Inspector::INSPECTORS[format(prefix, i)]; i += 1; end @inspect_mode = format(prefix, i) @inspect_method = opt Inspector.def_inspector(format(prefix, i), @inspect_method) else puts "Can't switch inspect mode(#{opt})." return end end print "Switch to#{unless @inspect_mode; ' non';end} inspect mode.\n" if verbose? @inspect_mode end
Size of the current WorkSpace stack
# File irb/ext/workspaces.rb, line 17 def irb_level workspace_stack.size end
The top-level workspace, see IRB::WorkSpace#main
# File irb/context.rb, line 149 def main @workspace.main 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.
# File irb/ext/workspaces.rb, line 58 def pop_workspace if workspaces.empty? print "workspace stack empty\n" return end @workspace = workspaces.pop end
Sets the mode
of the prompt in this context.
See Customizing the IRB Prompt at IRB for more information.
# File irb/context.rb, line 370 def prompt_mode=(mode) @prompt_mode = mode pconf = IRB.conf[:PROMPT][mode] @prompt_i = pconf[:PROMPT_I] @prompt_s = pconf[:PROMPT_S] @prompt_c = pconf[:PROMPT_C] @prompt_n = pconf[:PROMPT_N] @return_format = pconf[:RETURN] if ai = pconf.include?(:AUTO_INDENT) @auto_indent_mode = ai else @auto_indent_mode = IRB.conf[:AUTO_INDENT] end end
Whether verbose? is
true
, and input_method
is either StdioInputMethod or ReidlineInputMethod or ReadlineInputMethod, see io for more information.
# File irb/context.rb, line 351 def prompting? verbose? || (STDIN.tty? && @io.kind_of?(StdioInputMethod) || @io.kind_of?(ReidlineInputMethod) || (defined?(ReadlineInputMethod) && @io.kind_of?(ReadlineInputMethod))) end
Creates a new workspace with the given object or binding, and appends it onto the current workspaces stack.
See #change_workspace and IRB::WorkSpace.new for more information.
# File irb/ext/workspaces.rb, line 35 def push_workspace(*_main) if _main.empty? if workspaces.empty? print "No other workspace\n" return nil end ws = workspaces.pop workspaces.push @workspace @workspace = ws return workspaces end workspaces.push @workspace @workspace = WorkSpace.new(@workspace.binding, _main[0]) if !(class<<main;ancestors;end).include?(ExtendCommandBundle) main.extend ExtendCommandBundle end end
A copy of the default IRB.conf[:SAVE_HISTORY]
# File irb/ext/save-history.rb, line 24 def save_history IRB.conf[:SAVE_HISTORY] end
Sets IRB.conf[:SAVE_HISTORY]
to the given val
and
calls init_save_history with this context.
Will store the number of val
entries of history in the history_file
Add the following to your .irbrc
to change the number of
history entries stored to 1000:
IRB.conf[:SAVE_HISTORY] = 1000
# File irb/ext/save-history.rb, line 38 def save_history=(val) IRB.conf[:SAVE_HISTORY] = val if val main_context = IRB.conf[:MAIN_CONTEXT] main_context = self unless main_context main_context.init_save_history end end
Sets the return value from the last statement evaluated in this context to last_value.
# File irb/context.rb, line 362 def set_last_value(value) @last_value = value @workspace.local_variable_set :_, value end
Returns whether irb
‘s own file reader method is used by
load
/require
or not.
This mode is globally affected (irb-wide).
# File irb/ext/use-loader.rb, line 43 def use_loader IRB.conf[:USE_LOADER] end
Sets IRB.conf[:USE_LOADER]
See use_loader for more information.
# File irb/ext/use-loader.rb, line 53 def use_loader=(opt) if IRB.conf[:USE_LOADER] != opt IRB.conf[:USE_LOADER] = opt if opt if !$".include?("irb/cmd/load") end (class<<@workspace.main;self;end).instance_eval { alias_method :load, :irb_load alias_method :require, :irb_require } else (class<<@workspace.main;self;end).instance_eval { alias_method :load, :__original__load__IRB_use_loader__ alias_method :require, :__original__require__IRB_use_loader__ } end end print "Switch to load/require#{unless use_loader; ' non';end} trace mode.\n" if verbose? opt end
# File irb/ext/tracer.rb, line 19 def use_tracer=(opt) # do nothing end
Returns whether messages are displayed or not.
# File irb/context.rb, line 332 def verbose? if @verbose.nil? if @io.kind_of?(ReidlineInputMethod) false elsif defined?(ReadlineInputMethod) && @io.kind_of?(ReadlineInputMethod) false elsif !STDIN.tty? or @io.kind_of?(FileInputMethod) true else false end else @verbose end end