1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[ruby/reline] Implement Reline::Terminfo.tigetflag

0451ed7a28
This commit is contained in:
aycabta 2022-01-01 23:03:32 +09:00 committed by git
parent fae0b66431
commit 6300c4dcc3
2 changed files with 34 additions and 1 deletions

View file

@ -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

View file

@ -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?