summaryrefslogtreecommitdiff
path: root/lib/reline
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2022-01-01 23:03:32 +0900
committergit <svn-admin@ruby-lang.org>2022-01-01 23:06:53 +0900
commit6300c4dcc3e040bdaf0f36e7be53e7c0e8c57ac0 (patch)
tree4a8dd7ffaeaea9314399a702f3a33c4c5c903635 /lib/reline
parentfae0b664315c23ef7db451f6241d256c12217051 (diff)
[ruby/reline] Implement Reline::Terminfo.tigetflag
https://github.com/ruby/reline/commit/0451ed7a28
Diffstat (limited to 'lib/reline')
-rw-r--r--lib/reline/terminfo.rb21
1 files changed, 20 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