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

ruby-changes:74360

From: Hiroshi <ko1@a...>
Date: Sat, 5 Nov 2022 14:36:12 +0900 (JST)
Subject: [ruby-changes:74360] 4d1faefa10 (ruby_3_1): Merge reline-0.3.1

https://git.ruby-lang.org/ruby.git/commit/?id=4d1faefa10

From 4d1faefa10518ada452d5a85f4e43a8bfda847cc Mon Sep 17 00:00:00 2001
From: Hiroshi SHIBATA <hsbt@r...>
Date: Mon, 31 Oct 2022 11:25:43 +0900
Subject: Merge reline-0.3.1

---
 lib/reline/key_actor/emacs.rb                    |  2 +-
 lib/reline/terminfo.rb                           | 39 +++++++++++++++++++++++-
 lib/reline/version.rb                            |  2 +-
 lib/reline/windows.rb                            |  2 +-
 test/reline/test_key_actor_emacs.rb              | 22 +++++++++++++
 test/reline/test_reline.rb                       |  2 +-
 test/reline/test_terminfo.rb                     | 30 +++++++++++++++---
 test/reline/yamatanooroti/termination_checker.rb |  2 +-
 test/reline/yamatanooroti/test_rendering.rb      |  1 +
 9 files changed, 92 insertions(+), 10 deletions(-)

diff --git a/lib/reline/key_actor/emacs.rb b/lib/reline/key_actor/emacs.rb
index 86e39b705c..a561feee57 100644
--- a/lib/reline/key_actor/emacs.rb
+++ b/lib/reline/key_actor/emacs.rb
@@ -43,7 +43,7 @@ class Reline::KeyActor::Emacs < Reline::KeyActor::Base https://github.com/ruby/ruby/blob/trunk/lib/reline/key_actor/emacs.rb#L43
     #  20 ^T
     :ed_transpose_chars,
     #  21 ^U
-    :ed_kill_line,
+    :unix_line_discard,
     #  22 ^V
     :ed_quoted_insert,
     #  23 ^W
diff --git a/lib/reline/terminfo.rb b/lib/reline/terminfo.rb
index b4d1d735f8..95ff082172 100644
--- a/lib/reline/terminfo.rb
+++ b/lib/reline/terminfo.rb
@@ -74,7 +74,22 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L74
     #extern 'char *tparm(const char *str, ...)'
     @tiparm = Fiddle::Function.new(curses_dl['tparm'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VARIADIC], Fiddle::TYPE_VOIDP)
   end
-  # TODO: add int tigetflag(char *capname) and int tigetnum(char *capname)
+  begin
+    #extern 'int tigetflag(char *str)'
+    @tigetflag = Fiddle::Function.new(curses_dl['tigetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
+  rescue Fiddle::DLError
+    # OpenBSD lacks tigetflag
+    #extern 'int tgetflag(char *str)'
+    @tigetflag = Fiddle::Function.new(curses_dl['tgetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
+  end
+  begin
+    #extern 'int tigetnum(char *str)'
+    @tigetnum = Fiddle::Function.new(curses_dl['tigetnum'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
+  rescue Fiddle::DLError
+    # OpenBSD lacks tigetnum
+    #extern 'int tgetnum(char *str)'
+    @tigetnum = Fiddle::Function.new(curses_dl['tgetnum'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
+  end
 
   def self.setupterm(term, fildes)
     errret_int = String.new("\x00" * 8, encoding: 'ASCII-8BIT')
@@ -122,6 +137,28 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L137
     @tiparm.(str, *new_args).to_s
   end
 
+  def self.tigetflag(capname)
+    flag = @tigetflag.(capname).to_i
+    case flag
+    when -1
+      raise TerminfoError, "not boolean capability: #{capname}"
+    when 0
+      raise TerminfoError, "can't find capability: #{capname}"
+    end
+    flag
+  end
+
+  def self.tigetnum(capname)
+    num = @tigetnum.(capname).to_i
+    case num
+    when -2
+      raise TerminfoError, "not numeric capability: #{capname}"
+    when -1
+      raise TerminfoError, "can't find capability: #{capname}"
+    end
+    num
+  end
+
   def self.enabled?
     true
   end
diff --git a/lib/reline/version.rb b/lib/reline/version.rb
index 3cc4318390..1bb1c02f3d 100644
--- a/lib/reline/version.rb
+++ b/lib/reline/version.rb
@@ -1,3 +1,3 @@ https://github.com/ruby/ruby/blob/trunk/lib/reline/version.rb#L1
 module Reline
-  VERSION = '0.3.0'
+  VERSION = '0.3.1'
 end
diff --git a/lib/reline/windows.rb b/lib/reline/windows.rb
index f46ebd2109..f064472ce7 100644
--- a/lib/reline/windows.rb
+++ b/lib/reline/windows.rb
@@ -386,7 +386,7 @@ class Reline::Windows https://github.com/ruby/ruby/blob/trunk/lib/reline/windows.rb#L386
   def self.scroll_down(val)
     return if val < 0
     return unless csbi = get_console_screen_buffer_info
-    buffer_width, x, y, buffer_lines, attributes, window_left, window_top, window_bottom = csbi.unpack('ssssSssx2s')
+    buffer_width, buffer_lines, x, y, attributes, window_left, window_top, window_bottom = csbi.unpack('ssssSssx2s')
     screen_height = window_bottom - window_top + 1
     val = screen_height if val > screen_height
 
diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb
index a5fdf247c8..40b26e5058 100644
--- a/test/reline/test_key_actor_emacs.rb
+++ b/test/reline/test_key_actor_emacs.rb
@@ -2329,4 +2329,26 @@ class Reline::KeyActor::Emacs::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_key_actor_emacs.rb#L2329
     assert_cursor(1)
     assert_cursor_max(1)
   end
+
+  def test_unix_line_discard
+    input_keys("\C-u", false)
+    assert_byte_pointer_size('')
+    assert_cursor(0)
+    assert_cursor_max(0)
+    assert_line('')
+    input_keys('abc')
+    assert_byte_pointer_size('abc')
+    assert_cursor(3)
+    assert_cursor_max(3)
+    input_keys("\C-b\C-u", false)
+    assert_byte_pointer_size('')
+    assert_cursor(0)
+    assert_cursor_max(1)
+    assert_line('c')
+    input_keys("\C-f\C-u", false)
+    assert_byte_pointer_size('')
+    assert_cursor(0)
+    assert_cursor_max(0)
+    assert_line('')
+  end
 end
diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb
index 03e663bcdd..662f91e589 100644
--- a/test/reline/test_reline.rb
+++ b/test/reline/test_reline.rb
@@ -137,7 +137,7 @@ class Reline::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_reline.rb#L137
   end
 
   def test_completion_proc
-    skip unless Reline.completion_proc == nil
+    omit unless Reline.completion_proc == nil
     # Another test can set Reline.completion_proc
 
     # assert_equal(nil, Reline.completion_proc)
diff --git a/test/reline/test_terminfo.rb b/test/reline/test_terminfo.rb
index f1bf197931..8aa1f56c71 100644
--- a/test/reline/test_terminfo.rb
+++ b/test/reline/test_terminfo.rb
@@ -9,24 +9,46 @@ class Reline::Terminfo::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_terminfo.rb#L9
   def test_tigetstr
     assert Reline::Terminfo.tigetstr('khome')
   rescue Reline::Terminfo::TerminfoError => e
-    skip e.message
+    omit e.message
   end
 
   def test_tiparm
     assert Reline::Terminfo.tigetstr('khome').tiparm
   rescue Reline::Terminfo::TerminfoError => e
-    skip e.message
+    omit e.message
   end
 
   def test_tigetstr_with_param
     assert Reline::Terminfo.tigetstr('cuu').include?('%p1%d')
   rescue Reline::Terminfo::TerminfoError => e
-    skip e.message
+    omit e.message
   end
 
   def test_tiparm_with_param
     assert Reline::Terminfo.tigetstr('cuu').tiparm(4649).include?('4649')
   rescue Reline::Terminfo::TerminfoError => e
-    skip e.message
+    omit e.message
+  end
+
+  def test_tigetflag
+    assert_instance_of Integer, Reline::Terminfo.tigetflag('xenl')
+  rescue Reline::Terminfo::TerminfoError => e
+    omit e.message
+  end
+
+  def test_tigetflag_with_error
+    assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag('cuu') }
+    assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag('unknown') }
+  end
+
+  def test_tigetnum
+    assert_instance_of Integer, Reline::Terminfo.tigetnum('colors')
+  rescue Reline::Terminfo::TerminfoError => e
+    omit e.message
+  end
+
+  def test_tigetnum_with_error
+    assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum('cuu') }
+    assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetnum('unknown') }
   end
 end if Reline::Terminfo.enabled?
diff --git a/test/reline/yamatanooroti/termination_checker.rb b/test/reline/yamatanooroti/termination_checker.rb
index 9c2c3ae740..24fb24c4b1 100644
--- a/test/reline/yamatanooroti/termination_checker.rb
+++ b/test/reline/yamatanooroti/termination_checker.rb
@@ -4,7 +4,7 @@ require 'irb/ruby-lex' https://github.com/ruby/ruby/blob/trunk/test/reline/yamatanooroti/termination_checker.rb#L4
 class TerminationChecker < RubyLex
   def terminated?(code)
     code.gsub!(/\n*$/, '').concat("\n")
-    @tokens = Ripper.lex(code)
+    @tokens = self.class.ripper_lex_without_warning(code)
     continue = process_continue
     code_block_open = check_code_block(code)
     indent = process_nesting_level
diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb
index 43c24f6412..849fb9faad 100644
--- a/test/reline/yamatanooroti/test_rendering.rb
+++ b/test/reline/yamatanooroti/test_rendering.rb
@@ -121,6 +121,7 @@ begin https://github.com/ruby/ruby/blob/trunk/test/reline/yamatanooroti/test_rendering.rb#L121
     end
 
     def test_finish_autowrapped_line_in_the_middle_of_multilines
+      omit if RUBY_VERSION < '2.7'
       start_terminal(30, 16, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.')
       write("<<~EOM\n  ABCDEFG\nEOM\n")
       close
-- 
cgit v1.2.3


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

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