diff options
author | aycabta <[email protected]> | 2022-01-01 23:03:32 +0900 |
---|---|---|
committer | git <[email protected]> | 2022-01-01 23:06:53 +0900 |
commit | 6300c4dcc3e040bdaf0f36e7be53e7c0e8c57ac0 (patch) | |
tree | 4a8dd7ffaeaea9314399a702f3a33c4c5c903635 | |
parent | fae0b664315c23ef7db451f6241d256c12217051 (diff) |
[ruby/reline] Implement Reline::Terminfo.tigetflag
https://github.com/ruby/reline/commit/0451ed7a28
-rw-r--r-- | lib/reline/terminfo.rb | 21 | ||||
-rw-r--r-- | test/reline/test_terminfo.rb | 14 |
2 files changed, 34 insertions, 1 deletions
diff --git a/lib/reline/terminfo.rb b/lib/reline/terminfo.rb index b4d1d735f8..82d3bf885f 100644 --- a/lib/reline/terminfo.rb +++ b/lib/reline/terminfo.rb @@ -74,7 +74,15 @@ module Reline::Terminfo #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 'char *tigetflag(const char *str, ...)' + @tigetflag = Fiddle::Function.new(curses_dl['tigetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT) + rescue Fiddle::DLError + # OpenBSD lacks tigetflag + #extern 'char *tgetflag(const char *str, ...)' + @tigetflag = Fiddle::Function.new(curses_dl['tgetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT) + end + # TODO: add int tigetnum(char *capname) def self.setupterm(term, fildes) errret_int = String.new("\x00" * 8, encoding: 'ASCII-8BIT') @@ -122,6 +130,17 @@ module Reline::Terminfo @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.enabled? true end diff --git a/test/reline/test_terminfo.rb b/test/reline/test_terminfo.rb index 0d6cbe41f3..3a6c03cb09 100644 --- a/test/reline/test_terminfo.rb +++ b/test/reline/test_terminfo.rb @@ -29,4 +29,18 @@ class Reline::Terminfo::Test < Reline::TestCase rescue Reline::Terminfo::TerminfoError => e 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') } + end + + def test_tigetflag_with_error_unknwon + assert_raise(Reline::Terminfo::TerminfoError) { Reline::Terminfo.tigetflag('unknown') } + end end if Reline::Terminfo.enabled? |