ruby-changes:70694
From: aycabta <ko1@a...>
Date: Sun, 2 Jan 2022 10:27:23 +0900 (JST)
Subject: [ruby-changes:70694] 85f304b931 (master): [ruby/reline] Implement Reline::Terminfo.tigetnum
https://git.ruby-lang.org/ruby.git/commit/?id=85f304b931 From 85f304b9315815f00c54db682a5bb3188c3fa2e8 Mon Sep 17 00:00:00 2001 From: aycabta <aycabta@g...> Date: Sun, 2 Jan 2022 10:17:33 +0900 Subject: [ruby/reline] Implement Reline::Terminfo.tigetnum https://github.com/ruby/reline/commit/695212d5d2 --- lib/reline/terminfo.rb | 20 +++++++++++++++++++- test/reline/test_terminfo.rb | 11 +++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/lib/reline/terminfo.rb b/lib/reline/terminfo.rb index 8b3105ceea2..95ff082172a 100644 --- a/lib/reline/terminfo.rb +++ b/lib/reline/terminfo.rb @@ -82,7 +82,14 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L82 #extern 'int tgetflag(char *str)' @tigetflag = Fiddle::Function.new(curses_dl['tgetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT) end - # TODO: add int tigetnum(char *capname) + 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') @@ -141,6 +148,17 @@ module Reline::Terminfo https://github.com/ruby/ruby/blob/trunk/lib/reline/terminfo.rb#L148 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/test/reline/test_terminfo.rb b/test/reline/test_terminfo.rb index 164ee7123fa..8aa1f56c71f 100644 --- a/test/reline/test_terminfo.rb +++ b/test/reline/test_terminfo.rb @@ -40,4 +40,15 @@ class Reline::Terminfo::Test < Reline::TestCase https://github.com/ruby/ruby/blob/trunk/test/reline/test_terminfo.rb#L40 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? -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/