Revert "Revert "[ruby/reline] Reline::ANSI is general io. Reline::GeneralIO is not.""

This reverts commit 6e84ac2359c8fc8cb686ef4644b9cae26cd5ab9e.

Now that the rubygems spec change has been merged, let's try reverting
this and fixing it with tompng's new patch.
This commit is contained in:
Takashi Kokubun 2024-06-04 11:32:54 -07:00
parent 40a9e806f2
commit 5ea843f9b2
4 changed files with 18 additions and 26 deletions

View File

@ -254,7 +254,6 @@ module Reline
raise ArgumentError.new('#readmultiline needs block to confirm multiline termination')
end
Reline.update_iogate
io_gate.with_raw_input do
inner_readline(prompt, add_hist, true, &confirm_multiline_termination)
end
@ -277,7 +276,6 @@ module Reline
def readline(prompt = '', add_hist = false)
@mutex.synchronize do
Reline.update_iogate
io_gate.with_raw_input do
inner_readline(prompt, add_hist, false)
end
@ -461,7 +459,7 @@ module Reline
end
private def may_req_ambiguous_char_width
@ambiguous_width = 2 if io_gate.dumb? or !STDOUT.tty?
@ambiguous_width = 2 if io_gate.dumb? || !STDIN.tty? || !STDOUT.tty?
return if defined? @ambiguous_width
io_gate.move_cursor_column(0)
begin
@ -555,18 +553,6 @@ module Reline
def self.line_editor
core.line_editor
end
def self.update_iogate
return if core.config.test_mode
# Need to change IOGate when `$stdout.tty?` change from false to true by `$stdout.reopen`
# Example: rails/spring boot the application in non-tty, then run console in tty.
if ENV['TERM'] != 'dumb' && core.io_gate.dumb? && $stdout.tty?
require 'reline/io/ansi'
remove_const(:IOGate)
const_set(:IOGate, Reline::ANSI.new)
end
end
end

View File

@ -19,11 +19,7 @@ module Reline
io
end
else
if $stdout.tty?
Reline::ANSI.new
else
Reline::Dumb.new
end
Reline::ANSI.new
end
end
end

View File

@ -174,12 +174,10 @@ class Reline::ANSI < Reline::IO
Reline.core.line_editor.handle_signal
end
c = @input.getbyte
(c == 0x16 && @input.raw(min: 0, time: 0, &:getbyte)) || c
(c == 0x16 && @input.tty? && @input.raw(min: 0, time: 0, &:getbyte)) || c
rescue Errno::EIO
# Maybe the I/O has been closed.
nil
rescue Errno::ENOTTY
nil
end
START_BRACKETED_PASTE = String.new("\e[200~", encoding: Encoding::ASCII_8BIT)
@ -239,12 +237,12 @@ class Reline::ANSI < Reline::IO
def set_screen_size(rows, columns)
@input.winsize = [rows, columns]
self
rescue Errno::ENOTTY
rescue Errno::ENOTTY, Errno::ENODEV
self
end
def cursor_pos
begin
if @input.tty? && @output.tty?
res = +''
m = nil
@input.raw do |stdin|
@ -263,7 +261,7 @@ class Reline::ANSI < Reline::IO
end
column = m[:column].to_i - 1
row = m[:row].to_i - 1
rescue Errno::ENOTTY
else
begin
buf = @output.pread(@output.pos, 0)
row = buf.count("\n")

View File

@ -969,6 +969,18 @@ begin
EOC
end
def test_nontty
omit if Reline.core.io_gate.win?
cmd = %Q{ruby -e 'puts(%Q{ello\C-ah\C-e})' | ruby -I#{@pwd}/lib -rreline -e 'p Reline.readline(%{> })' | ruby -e 'print STDIN.read'}
start_terminal(40, 50, ['bash', '-c', cmd])
sleep 1
close rescue nil
assert_screen(<<~'EOC')
> hello
"hello"
EOC
end
def test_eof_with_newline
omit if Reline.core.io_gate.win?
cmd = %Q{ruby -e 'print(%Q{abc def \\e\\r})' | ruby -I#{@pwd}/lib -rreline -e 'p Reline.readline(%{> })'}