1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

IRB: Document command evaluation history.

This commit is contained in:
zverok 2019-10-26 11:04:24 +03:00 committed by Takashi Kokubun
parent 2746fd5d50
commit 4fe06f4667
Notes: git 2019-10-27 02:25:05 +09:00
2 changed files with 56 additions and 9 deletions

View file

@ -124,7 +124,7 @@ require "irb/version"
# === History
#
# By default, irb will store the last 1000 commands you used in
# <code>~/.irb_history</code>.
# <code>IRB.conf[:HISTORY_FILE]</code> (<code>~/.irb_history</code> by default).
#
# If you want to disable history, add the following to your +.irbrc+:
#
@ -132,6 +132,14 @@ require "irb/version"
#
# See IRB::Context#save_history= for more information.
#
# The history of _resuls_ 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 IRB::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:
@ -274,7 +282,9 @@ require "irb/version"
# <code>_</code>::
# The value command executed, as a local variable
# <code>__</code>::
# The history of evaluated commands
# The history of evaluated commands. Available only if
# <code>IRB.conf[:EVAL_HISTORY]</code> is not +nil+ (which is the default).
# See also IRB::Context#eval_history= and IRB::History.
# <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

View file

@ -31,9 +31,12 @@ module IRB # :nodoc:
end
remove_method :eval_history= if method_defined?(:eval_history=)
# The command result history limit.
# The command result history limit. This method is not available until
# #eval_history= was called with non-nil value (directly or via
# setting <code>IRB.conf[:EVAL_HISTORY]</code> in <code>.irbrc</code>).
attr_reader :eval_history
# Sets command result history limit.
# Sets command result history limit. Default value is set from
# <code>IRB.conf[:EVAL_HISTORY]</code>.
#
# +no+ is an Integer or +nil+.
#
@ -42,6 +45,9 @@ module IRB # :nodoc:
# 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 <code>__</code> variable, see
# IRB::History.
def eval_history=(no)
if no
if defined?(@eval_history) && @eval_history
@ -59,20 +65,51 @@ module IRB # :nodoc:
end
end
class History # :nodoc:
# Represents history of results of previously evaluated commands.
#
# Available via <code>__</code> variable, only if <code>IRB.conf[:EVAL_HISTORY]</code>
# or <code>IRB::CurrentContext().eval_history</code> is non-nil integer value
# (by default it is +nil+).
#
# Example (in `irb`):
#
# # Initialize history
# IRB::CurrentContext().eval_history = 10
# # => 10
#
# # Perform some commands...
# 1 + 2
# # => 3
# puts 'x'
# # x
# # => nil
# raise RuntimeError
# # ...error raised
#
# # Inspect history (format is "<item number> <evaluated value>":
# __
# # => 1 10
# # 2 3
# # 3 nil
#
# __[1]
# # => 10
#
class History
def initialize(size = 16)
def initialize(size = 16) # :nodoc:
@size = size
@contents = []
end
def size(size)
def size(size) # :nodoc:
if size != 0 && size < @size
@contents = @contents[@size - size .. @size]
end
@size = size
end
# Get one item of the content (both positive and negative indexes work).
def [](idx)
begin
if idx >= 0
@ -85,14 +122,14 @@ module IRB # :nodoc:
end
end
def push(no, val)
def push(no, val) # :nodoc:
@contents.push [no, val]
@contents.shift if @size != 0 && @contents.size > @size
end
alias real_inspect inspect
def inspect
def inspect # :nodoc:
if @contents.empty?
return real_inspect
end