IRB: Document command evaluation history.
This commit is contained in:
parent
2746fd5d50
commit
4fe06f4667
Notes:
git
2019-10-27 02:25:05 +09:00
14
lib/irb.rb
14
lib/irb.rb
@ -124,7 +124,7 @@ require "irb/version"
|
|||||||
# === History
|
# === History
|
||||||
#
|
#
|
||||||
# By default, irb will store the last 1000 commands you used in
|
# 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+:
|
# 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.
|
# 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
|
# == Customizing the IRB Prompt
|
||||||
#
|
#
|
||||||
# In order to customize the prompt, you can change the following Hash:
|
# In order to customize the prompt, you can change the following Hash:
|
||||||
@ -274,7 +282,9 @@ require "irb/version"
|
|||||||
# <code>_</code>::
|
# <code>_</code>::
|
||||||
# The value command executed, as a local variable
|
# The value command executed, as a local variable
|
||||||
# <code>__</code>::
|
# <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>::
|
# <code>__[line_no]</code>::
|
||||||
# Returns the evaluation value at the given line number, +line_no+.
|
# 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
|
# If +line_no+ is a negative, the return value +line_no+ many lines before
|
||||||
|
@ -31,9 +31,12 @@ module IRB # :nodoc:
|
|||||||
end
|
end
|
||||||
|
|
||||||
remove_method :eval_history= if method_defined?(:eval_history=)
|
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
|
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+.
|
# +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 0, the number of history items is unlimited.
|
||||||
#
|
#
|
||||||
# If +no+ is +nil+, execution result history isn't used (default).
|
# 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)
|
def eval_history=(no)
|
||||||
if no
|
if no
|
||||||
if defined?(@eval_history) && @eval_history
|
if defined?(@eval_history) && @eval_history
|
||||||
@ -59,20 +65,51 @@ module IRB # :nodoc:
|
|||||||
end
|
end
|
||||||
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
|
@size = size
|
||||||
@contents = []
|
@contents = []
|
||||||
end
|
end
|
||||||
|
|
||||||
def size(size)
|
def size(size) # :nodoc:
|
||||||
if size != 0 && size < @size
|
if size != 0 && size < @size
|
||||||
@contents = @contents[@size - size .. @size]
|
@contents = @contents[@size - size .. @size]
|
||||||
end
|
end
|
||||||
@size = size
|
@size = size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Get one item of the content (both positive and negative indexes work).
|
||||||
def [](idx)
|
def [](idx)
|
||||||
begin
|
begin
|
||||||
if idx >= 0
|
if idx >= 0
|
||||||
@ -85,14 +122,14 @@ module IRB # :nodoc:
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def push(no, val)
|
def push(no, val) # :nodoc:
|
||||||
@contents.push [no, val]
|
@contents.push [no, val]
|
||||||
@contents.shift if @size != 0 && @contents.size > @size
|
@contents.shift if @size != 0 && @contents.size > @size
|
||||||
end
|
end
|
||||||
|
|
||||||
alias real_inspect inspect
|
alias real_inspect inspect
|
||||||
|
|
||||||
def inspect
|
def inspect # :nodoc:
|
||||||
if @contents.empty?
|
if @contents.empty?
|
||||||
return real_inspect
|
return real_inspect
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user