diff options
| author | Takashi Kokubun <takashikkbn@gmail.com> | 2024-06-04 11:32:54 -0700 |
|---|---|---|
| committer | Takashi Kokubun <takashikkbn@gmail.com> | 2024-06-04 11:33:12 -0700 |
| commit | 5ea843f9b237c08dbdc82125462cf431bd885c7b (patch) | |
| tree | 7807da62916bd2e46f5c33b5ee6673c840ff52c3 /lib | |
| parent | 40a9e806f2e83cf5e26f8fa52ad4f624a4118915 (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.rb | 16 | ||||
| -rw-r--r-- | lib/reline/io.rb | 6 | ||||
| -rw-r--r-- | lib/reline/io/ansi.rb | 10 |
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") |
