diff options
Diffstat (limited to 'lib/reline/terminfo.rb')
-rw-r--r-- | lib/reline/terminfo.rb | 44 |
1 files changed, 14 insertions, 30 deletions
diff --git a/lib/reline/terminfo.rb b/lib/reline/terminfo.rb index f53642b919..c2b1f681b4 100644 --- a/lib/reline/terminfo.rb +++ b/lib/reline/terminfo.rb @@ -1,4 +1,7 @@ begin + # Ignore warning `Add fiddle to your Gemfile or gemspec` in Ruby 3.4. + # terminfo.rb and ansi.rb supports fiddle unavailable environment. + verbose, $VERBOSE = $VERBOSE, nil require 'fiddle' require 'fiddle/import' rescue LoadError @@ -7,6 +10,8 @@ rescue LoadError false end end +ensure + $VERBOSE = verbose end module Reline::Terminfo @@ -31,21 +36,7 @@ module Reline::Terminfo @curses_dl = false def self.curses_dl return @curses_dl unless @curses_dl == false - if RUBY_VERSION >= '3.0.0' - # Gem module isn't defined in test-all of the Ruby repository, and - # Fiddle in Ruby 3.0.0 or later supports Fiddle::TYPE_VARIADIC. - fiddle_supports_variadic = true - elsif Fiddle.const_defined?(:VERSION,false) and Gem::Version.create(Fiddle::VERSION) >= Gem::Version.create('1.0.1') - # Fiddle::TYPE_VARIADIC is supported from Fiddle 1.0.1. - fiddle_supports_variadic = true - else - fiddle_supports_variadic = false - end - if fiddle_supports_variadic and not Fiddle.const_defined?(:TYPE_VARIADIC) - # If the libffi version is not 3.0.5 or higher, there isn't TYPE_VARIADIC. - fiddle_supports_variadic = false - end - if fiddle_supports_variadic + if Fiddle.const_defined?(:TYPE_VARIADIC) curses_dl_files.each do |curses_name| result = Fiddle::Handle.new(curses_name) rescue Fiddle::DLError @@ -92,25 +83,13 @@ module Reline::Terminfo end def self.setupterm(term, fildes) - errret_int = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT) + errret_int = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE) ret = @setupterm.(term, fildes, errret_int) - errret = errret_int[0, Fiddle::SIZEOF_INT].unpack1('i') case ret when 0 # OK - 0 + @term_supported = true when -1 # ERR - case errret - when 1 - raise TerminfoError.new('The terminal is hardcopy, cannot be used for curses applications.') - when 0 - raise TerminfoError.new('The terminal could not be found, or that it is a generic type, having too little information for curses applications to run.') - when -1 - raise TerminfoError.new('The terminfo database could not be found.') - else # unknown - -1 - end - else # unknown - -2 + @term_supported = false end end @@ -162,9 +141,14 @@ module Reline::Terminfo num end + # NOTE: This means Fiddle and curses are enabled. def self.enabled? true end + + def self.term_supported? + @term_supported + end end if Reline::Terminfo.curses_dl module Reline::Terminfo |