summaryrefslogtreecommitdiff
path: root/lib/reline/terminfo.rb
diff options
context:
space:
mode:
authortomoya ishida <[email protected]>2024-11-15 08:14:14 +0900
committergit <[email protected]>2024-11-14 23:14:18 +0000
commit8f3a6ebcf4cc585c60687f3d9941bf9bcd7eb9b6 (patch)
tree8b6aa1f259871cba785c544cada920fe51e83aad /lib/reline/terminfo.rb
parent4074c6b427ff53fc9e3dbffcd2792e5dd8b3a7ef (diff)
[ruby/reline] Drop loading terminfo, remove fiddle dependency in
non-windows environment. (https://github.com/ruby/reline/pull/769) Reline works perfectly in most major terminal emulators without terminfo. In minor/old terminal emulator, we used to get key bindings from terminfo, but I think it is not used so much. https://github.com/ruby/reline/commit/3ceba3bff7
Diffstat (limited to 'lib/reline/terminfo.rb')
-rw-r--r--lib/reline/terminfo.rb158
1 files changed, 0 insertions, 158 deletions
diff --git a/lib/reline/terminfo.rb b/lib/reline/terminfo.rb
deleted file mode 100644
index c2b1f681b4..0000000000
--- a/lib/reline/terminfo.rb
+++ /dev/null
@@ -1,158 +0,0 @@
-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
- module Reline::Terminfo
- def self.curses_dl
- false
- end
- end
-ensure
- $VERBOSE = verbose
-end
-
-module Reline::Terminfo
- extend Fiddle::Importer
-
- class TerminfoError < StandardError; end
-
- def self.curses_dl_files
- case RUBY_PLATFORM
- when /mingw/, /mswin/
- # aren't supported
- []
- when /cygwin/
- %w[cygncursesw-10.dll cygncurses-10.dll]
- when /darwin/
- %w[libncursesw.dylib libcursesw.dylib libncurses.dylib libcurses.dylib]
- else
- %w[libncursesw.so libcursesw.so libncurses.so libcurses.so]
- end
- end
-
- @curses_dl = false
- def self.curses_dl
- return @curses_dl unless @curses_dl == false
- if Fiddle.const_defined?(:TYPE_VARIADIC)
- curses_dl_files.each do |curses_name|
- result = Fiddle::Handle.new(curses_name)
- rescue Fiddle::DLError
- next
- else
- @curses_dl = result
- break
- end
- end
- @curses_dl = nil if @curses_dl == false
- @curses_dl
- end
-end if not Reline.const_defined?(:Terminfo) or not Reline::Terminfo.respond_to?(:curses_dl)
-
-module Reline::Terminfo
- dlload curses_dl
- #extern 'int setupterm(char *term, int fildes, int *errret)'
- @setupterm = Fiddle::Function.new(curses_dl['setupterm'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_INT, Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
- #extern 'char *tigetstr(char *capname)'
- @tigetstr = Fiddle::Function.new(curses_dl['tigetstr'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_VOIDP)
- begin
- #extern 'char *tiparm(const char *str, ...)'
- @tiparm = Fiddle::Function.new(curses_dl['tiparm'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VARIADIC], Fiddle::TYPE_VOIDP)
- rescue Fiddle::DLError
- # OpenBSD lacks tiparm
- #extern 'char *tparm(const char *str, ...)'
- @tiparm = Fiddle::Function.new(curses_dl['tparm'], [Fiddle::TYPE_VOIDP, Fiddle::TYPE_VARIADIC], Fiddle::TYPE_VOIDP)
- end
- begin
- #extern 'int tigetflag(char *str)'
- @tigetflag = Fiddle::Function.new(curses_dl['tigetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
- rescue Fiddle::DLError
- # OpenBSD lacks tigetflag
- #extern 'int tgetflag(char *str)'
- @tigetflag = Fiddle::Function.new(curses_dl['tgetflag'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT)
- end
- 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 = Fiddle::Pointer.malloc(Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
- ret = @setupterm.(term, fildes, errret_int)
- case ret
- when 0 # OK
- @term_supported = true
- when -1 # ERR
- @term_supported = false
- end
- end
-
- class StringWithTiparm < String
- def tiparm(*args) # for method chain
- Reline::Terminfo.tiparm(self, *args)
- end
- end
-
- def self.tigetstr(capname)
- raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String)
- capability = @tigetstr.(capname)
- case capability.to_i
- when 0, -1
- raise TerminfoError, "can't find capability: #{capname}"
- end
- StringWithTiparm.new(capability.to_s)
- end
-
- def self.tiparm(str, *args)
- new_args = []
- args.each do |a|
- new_args << Fiddle::TYPE_INT << a
- end
- @tiparm.(str, *new_args).to_s
- end
-
- def self.tigetflag(capname)
- raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String)
- 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.tigetnum(capname)
- raise TerminfoError, "capname is not String: #{capname.inspect}" unless capname.is_a?(String)
- 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
-
- # 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
- def self.enabled?
- false
- end
-end unless Reline::Terminfo.curses_dl