summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2024-06-04 11:32:54 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2024-06-04 11:33:12 -0700
commit5ea843f9b237c08dbdc82125462cf431bd885c7b (patch)
tree7807da62916bd2e46f5c33b5ee6673c840ff52c3 /lib
parent40a9e806f2e83cf5e26f8fa52ad4f624a4118915 (diff)
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/reline.rb16
-rw-r--r--lib/reline/io.rb6
-rw-r--r--lib/reline/io/ansi.rb10
3 files changed, 6 insertions, 26 deletions
diff --git a/lib/reline.rb b/lib/reline.rb
index 33a1cfc625..6bae469894 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -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
diff --git a/lib/reline/io.rb b/lib/reline/io.rb
index 7fca0c338a..c1dd1a56c8 100644
--- a/lib/reline/io.rb
+++ b/lib/reline/io.rb
@@ -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
diff --git a/lib/reline/io/ansi.rb b/lib/reline/io/ansi.rb
index cf3c9965dd..aa8ff256e2 100644
--- a/lib/reline/io/ansi.rb
+++ b/lib/reline/io/ansi.rb
@@ -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")