diff options
author | tomoya ishida <tomoyapenguin@gmail.com> | 2024-05-11 02:19:38 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2024-05-10 17:19:42 +0000 |
commit | 68b6fe70484b1fed2767fc9b838a487aa47d3560 (patch) | |
tree | 147e1c3ddccc1d7fa80cb93d261f57ae1ff866bd | |
parent | 3ec5a9325fe86f65326dcc8746db80a3982e7b80 (diff) |
[ruby/reline] Avoid STDIN.winsize called in `require "reline"`
(https://github.com/ruby/reline/pull/703)
https://github.com/ruby/reline/commit/21891c47c4
-rw-r--r-- | lib/reline/line_editor.rb | 2 | ||||
-rw-r--r-- | test/reline/test_reline.rb | 20 |
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 9e221f4c9c..4c76932c10 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -75,7 +75,7 @@ class Reline::LineEditor def initialize(config, encoding) @config = config @completion_append_character = '' - @screen_size = Reline::IOGate.get_screen_size + @screen_size = [0, 0] # Should be initialized with actual winsize in LineEditor#reset reset_variables(encoding: encoding) end diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb index 40c880c11f..a20a5c9f44 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -378,10 +378,28 @@ class Reline::Test < Reline::TestCase assert_equal("Reline::GeneralIO", out.chomp) end + def test_require_reline_should_not_trigger_winsize + pend if win? + lib = File.expand_path("../../lib", __dir__) + code = <<~RUBY + require "io/console" + def STDIN.tty?; true; end + def STDOUT.tty?; true; end + def STDIN.winsize; raise; end + require("reline") && p(Reline.core.io_gate) + RUBY + out = IO.popen([{}, Reline.test_rubybin, "-I#{lib}", "-e", code], &:read) + assert_equal("Reline::ANSI", out.chomp) + end + + def win? + /mswin|mingw/.match?(RUBY_PLATFORM) + end + def get_reline_encoding if encoding = Reline.core.encoding encoding - elsif RUBY_PLATFORM =~ /mswin|mingw/ + elsif win? Encoding::UTF_8 else Encoding::default_external |