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

ruby-changes:70150

From: ima1zumi <ko1@a...>
Date: Fri, 10 Dec 2021 22:19:27 +0900 (JST)
Subject: [ruby-changes:70150] 5f1975a454 (master): [ruby/reline] @convert_meta is true unless 8-bit characters

https://git.ruby-lang.org/ruby.git/commit/?id=5f1975a454

From 5f1975a454dd9a6743bfa196111a4fde62366798 Mon Sep 17 00:00:00 2001
From: ima1zumi <mariimaizumi5@g...>
Date: Mon, 6 Dec 2021 23:26:38 +0900
Subject: [ruby/reline] @convert_meta is true unless 8-bit characters

If Reline::IOGate.encoding contains 7-bit characters, convert-meta will set it On.

Because in readline(3):

>  The default is On, but readline will set it to Off if the locale contains eight-bit characters.

As far as I know, 7-bit encoding used in terminals is only US-ASCII.

https://github.com/ruby/reline/commit/b71d1fa496
---
 lib/reline/config.rb       |  5 +++++
 test/reline/test_config.rb | 18 ++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/lib/reline/config.rb b/lib/reline/config.rb
index 4b2655d8eb5..5ef5ce4e8d4 100644
--- a/lib/reline/config.rb
+++ b/lib/reline/config.rb
@@ -67,6 +67,7 @@ class Reline::Config https://github.com/ruby/ruby/blob/trunk/lib/reline/config.rb#L67
     @keyseq_timeout = 500
     @test_mode = false
     @autocompletion = false
+    @convert_meta = true if seven_bit_encoding?(Reline::IOGate.encoding)
   end
 
   def reset
@@ -387,4 +388,8 @@ class Reline::Config https://github.com/ruby/ruby/blob/trunk/lib/reline/config.rb#L388
     end
     ret
   end
+
+  private def seven_bit_encoding?(encoding)
+    encoding == Encoding::US_ASCII
+  end
 end
diff --git a/test/reline/test_config.rb b/test/reline/test_config.rb
index aa549a392d6..e00a47c7057 100644
--- a/test/reline/test_config.rb
+++ b/test/reline/test_config.rb
@@ -11,12 +11,14 @@ class Reline::Config::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_config.rb#L11
       Dir.mkdir(@tmpdir)
     end
     Dir.chdir(@tmpdir)
+    Reline.test_mode
     @config = Reline::Config.new
   end
 
   def teardown
     Dir.chdir(@pwd)
     FileUtils.rm_rf(@tmpdir)
+    Reline.test_reset
     @config.reset
   end
 
@@ -81,6 +83,22 @@ class Reline::Config::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_config.rb#L83
     assert_equal '(Emacs)', @config.instance_variable_get(:@emacs_mode_string)
   end
 
+  def test_encoding_is_ascii
+    @config.reset
+    Reline::IOGate.reset(encoding: Encoding::US_ASCII)
+    @config = Reline::Config.new
+
+    assert_equal true, @config.convert_meta
+  end
+
+  def test_encoding_is_not_ascii
+    @config.reset
+    Reline::IOGate.reset(encoding: Encoding::UTF_8)
+    @config = Reline::Config.new
+
+    assert_equal nil, @config.convert_meta
+  end
+
   def test_comment_line
     @config.read_lines([" #a: error\n"])
     assert_not_include @config.key_bindings, nil
-- 
cgit v1.2.1


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

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