[前][次][番号順一覧][スレッド一覧]

ruby-changes:73355

From: Nobuyoshi <ko1@a...>
Date: Thu, 1 Sep 2022 16:36:30 +0900 (JST)
Subject: [ruby-changes:73355] 59e8569cf9 (master): [ruby/reline] Support dumb terminal

https://git.ruby-lang.org/ruby.git/commit/?id=59e8569cf9

From 59e8569cf938e0e449fd649b564da995ffb67470 Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Thu, 1 Sep 2022 14:14:46 +0900
Subject: [ruby/reline] Support dumb terminal

The "dumb" terminal is considered only on MSys tty now.  However, the
`TERM` feature has been used on many Unix-like systems for decades,
not MSys specific.

https://github.com/ruby/reline/commit/53fd51ab62
---
 lib/reline.rb              | 29 +++++++++++++----------------
 test/reline/test_reline.rb |  6 ++++++
 2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/lib/reline.rb b/lib/reline.rb
index 0487232a0d..f22b573e6d 100644
--- a/lib/reline.rb
+++ b/lib/reline.rb
@@ -601,24 +601,21 @@ module Reline https://github.com/ruby/ruby/blob/trunk/lib/reline.rb#L601
 end
 
 require 'reline/general_io'
-if RbConfig::CONFIG['host_os'] =~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/
-  require 'reline/windows'
-  if Reline::Windows.msys_tty?
-    Reline::IOGate = if ENV['TERM'] == 'dumb'
-      Reline::GeneralIO
-    else
-      require 'reline/ansi'
-      Reline::ANSI
-    end
+io = Reline::GeneralIO
+unless ENV['TERM'] == 'dumb'
+  case RbConfig::CONFIG['host_os']
+  when /mswin|msys|mingw|cygwin|bccwin|wince|emc/
+    require 'reline/windows'
+    tty = (io = Reline::Windows).msys_tty?
   else
-    Reline::IOGate = Reline::Windows
+    tty = $stdout.tty?
   end
+end
+Reline::IOGate = if tty
+  require 'reline/ansi'
+  Reline::ANSI
 else
-  Reline::IOGate = if $stdout.isatty
-    require 'reline/ansi'
-    Reline::ANSI
-  else
-    Reline::GeneralIO
-  end
+  io
 end
+
 Reline::HISTORY = Reline::History.new(Reline.core.config)
diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb
index 8828e41985..82447fd16c 100644
--- a/test/reline/test_reline.rb
+++ b/test/reline/test_reline.rb
@@ -397,6 +397,12 @@ class Reline::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_reline.rb#L397
     # TODO in Reline::Core
   end
 
+  def test_dumb_terminal
+    lib = File.expand_path("../../lib", __dir__)
+    out = IO.popen([{"TERM"=>"dumb"}, "ruby", "-I#{lib}", "-rreline", "-e", "p Reline::IOGate"], &:read)
+    assert_equal("Reline::GeneralIO", out.chomp)
+  end
+
   def get_reline_encoding
     if encoding = Reline::IOGate.encoding
       encoding
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]