summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/reline.rb3
-rw-r--r--test/reline/test_key_actor_emacs.rb4
-rw-r--r--test/reline/test_key_actor_vi.rb7
3 files changed, 9 insertions, 5 deletions
diff --git a/lib/reline.rb b/lib/reline.rb
index 656fab2fea..df2b620448 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -46,10 +46,13 @@ module Reline
end
def push(*val)
+ diff = size + val.size - @@config.history_size
+ shift(diff) if diff > 0
super(*(val.map{ |v| String.new(v, encoding: Encoding::default_external) }))
end
def <<(val)
+ shift if size + 1 > @@config.history_size
super(String.new(val, encoding: Encoding::default_external))
end
diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb
index 5778677ad8..f76ce66dfe 100644
--- a/test/reline/test_key_actor_emacs.rb
+++ b/test/reline/test_key_actor_emacs.rb
@@ -4,9 +4,9 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase
def setup
Reline.send(:test_mode)
@prompt = '> '
- @config = Reline::Config.new # Emacs mode is default
+ @config = Reline.class_variable_get(:@@config) # Emacs mode is default
+ @line_editor = Reline.class_variable_get(:@@line_editor)
@encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external)
- @line_editor = Reline::LineEditor.new(@config)
@line_editor.reset(@prompt, @encoding)
end
diff --git a/test/reline/test_key_actor_vi.rb b/test/reline/test_key_actor_vi.rb
index f5ceda05a6..ac62a09d16 100644
--- a/test/reline/test_key_actor_vi.rb
+++ b/test/reline/test_key_actor_vi.rb
@@ -4,12 +4,13 @@ class Reline::KeyActor::ViInsert::Test < Reline::TestCase
def setup
Reline.send(:test_mode)
@prompt = '> '
- @config = Reline::Config.new
+ @config = Reline.class_variable_get(:@@config) # Emacs mode is default
@config.read_lines(<<~LINES.split(/(?<=\n)/))
set editing-mode vi
LINES
- @line_editor = Reline::LineEditor.new(@config)
- @line_editor.reset(@prompt, (RELINE_TEST_ENCODING rescue Encoding.default_external))
+ @line_editor = Reline.class_variable_get(:@@line_editor)
+ @encoding = (RELINE_TEST_ENCODING rescue Encoding.default_external)
+ @line_editor.reset(@prompt, @encoding)
end
def test_vi_command_mode