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/