[ruby/reline] Remove instance variable @first_char
(https://github.com/ruby/reline/pull/717) When Reline reads EOF, Reline.readline should return nil if and only if input is empty https://github.com/ruby/reline/commit/cc74b3686a
This commit is contained in:
parent
fbb61a26e7
commit
f465045dd6
@ -238,7 +238,6 @@ class Reline::LineEditor
|
|||||||
@perfect_matched = nil
|
@perfect_matched = nil
|
||||||
@menu_info = nil
|
@menu_info = nil
|
||||||
@searching_prompt = nil
|
@searching_prompt = nil
|
||||||
@first_char = true
|
|
||||||
@just_cursor_moving = false
|
@just_cursor_moving = false
|
||||||
@eof = false
|
@eof = false
|
||||||
@continuous_insertion_buffer = String.new(encoding: @encoding)
|
@continuous_insertion_buffer = String.new(encoding: @encoding)
|
||||||
@ -1110,13 +1109,10 @@ class Reline::LineEditor
|
|||||||
end
|
end
|
||||||
if key.char.nil?
|
if key.char.nil?
|
||||||
process_insert(force: true)
|
process_insert(force: true)
|
||||||
if @first_char
|
@eof = buffer_empty?
|
||||||
@eof = true
|
|
||||||
end
|
|
||||||
finish
|
finish
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@first_char = false
|
|
||||||
@completion_occurs = false
|
@completion_occurs = false
|
||||||
|
|
||||||
if key.char.is_a?(Symbol)
|
if key.char.is_a?(Symbol)
|
||||||
@ -1409,6 +1405,10 @@ class Reline::LineEditor
|
|||||||
whole_lines.join("\n")
|
whole_lines.join("\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private def buffer_empty?
|
||||||
|
current_line.empty? and @buffer_of_lines.size == 1
|
||||||
|
end
|
||||||
|
|
||||||
def finished?
|
def finished?
|
||||||
@finished
|
@finished
|
||||||
end
|
end
|
||||||
@ -1937,7 +1937,7 @@ class Reline::LineEditor
|
|||||||
alias_method :kill_whole_line, :em_kill_line
|
alias_method :kill_whole_line, :em_kill_line
|
||||||
|
|
||||||
private def em_delete(key)
|
private def em_delete(key)
|
||||||
if current_line.empty? and @buffer_of_lines.size == 1 and key == "\C-d".ord
|
if buffer_empty? and key == "\C-d".ord
|
||||||
@eof = true
|
@eof = true
|
||||||
finish
|
finish
|
||||||
elsif @byte_pointer < current_line.bytesize
|
elsif @byte_pointer < current_line.bytesize
|
||||||
@ -2285,8 +2285,7 @@ class Reline::LineEditor
|
|||||||
end
|
end
|
||||||
|
|
||||||
private def vi_list_or_eof(key)
|
private def vi_list_or_eof(key)
|
||||||
if current_line.empty? and @buffer_of_lines.size == 1
|
if buffer_empty?
|
||||||
set_current_line('', 0)
|
|
||||||
@eof = true
|
@eof = true
|
||||||
finish
|
finish
|
||||||
else
|
else
|
||||||
|
@ -390,6 +390,30 @@ class Reline::Test < Reline::TestCase
|
|||||||
assert_match(/\AReline::ANSI\nprompt> /, out)
|
assert_match(/\AReline::ANSI\nprompt> /, out)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_read_eof_returns_input
|
||||||
|
pend if win?
|
||||||
|
lib = File.expand_path("../../lib", __dir__)
|
||||||
|
code = "p result: Reline.readline"
|
||||||
|
out = IO.popen([Reline.test_rubybin, "-I#{lib}", "-rreline", "-e", code], "r+") do |io|
|
||||||
|
io.write "a\C-a"
|
||||||
|
io.close_write
|
||||||
|
io.read
|
||||||
|
end
|
||||||
|
assert_include(out, '{:result=>"a"}')
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_read_eof_returns_nil_if_empty
|
||||||
|
pend if win?
|
||||||
|
lib = File.expand_path("../../lib", __dir__)
|
||||||
|
code = "p result: Reline.readline"
|
||||||
|
out = IO.popen([Reline.test_rubybin, "-I#{lib}", "-rreline", "-e", code], "r+") do |io|
|
||||||
|
io.write "a\C-h"
|
||||||
|
io.close_write
|
||||||
|
io.read
|
||||||
|
end
|
||||||
|
assert_include(out, '{:result=>nil}')
|
||||||
|
end
|
||||||
|
|
||||||
def test_require_reline_should_not_trigger_winsize
|
def test_require_reline_should_not_trigger_winsize
|
||||||
pend if win?
|
pend if win?
|
||||||
lib = File.expand_path("../../lib", __dir__)
|
lib = File.expand_path("../../lib", __dir__)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user