Class: TermTime::TermInfo
- Inherits:
-
Object
- Object
- TermTime::TermInfo
- Defined in:
- lib/termtime/terminfo.rb
Defined Under Namespace
Instance Method Summary collapse
- #flags ⇒ Object
- #getflag(name) ⇒ Object
- #getnum(name) ⇒ Object
- #getstr(name) ⇒ Object
-
#initialize(fname = ENV["TERM"]) ⇒ TermInfo
constructor
A new instance of TermInfo.
- #names ⇒ Object
- #numbers ⇒ Object
- #str(name) ⇒ Object
- #str?(name) ⇒ Boolean
- #strings ⇒ Object
Constructor Details
#initialize(fname = ENV["TERM"]) ⇒ TermInfo
Returns a new instance of TermInfo.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/termtime/terminfo.rb', line 35 def initialize fname = ENV["TERM"] unless File.file? fname fname = "/usr/share/terminfo/#{fname.getbyte(0).to_s(16)}/#{fname}" end File.open fname, "rb" do |f| magic, names_size, booleans_size, short_int_count, offset_count, string_table_size = f.read((2 * 6)).unpack("ssssss") raise unless magic == 0432 @names = f.read(names_size - 1).force_encoding("UTF-8").freeze raise unless f.readbyte == 0 @flags = f.read(booleans_size - 1) f.readbyte f.readbyte if f.pos % 2 != 0 # alignment @numbers = f.read(short_int_count * 2) strings = f.read(offset_count * 2) string_table = f.read(string_table_size) @strings = decode_strings(strings, string_table) end end |
Instance Method Details
#flags ⇒ Object
63 64 65 66 67 68 69 70 71 |
# File 'lib/termtime/terminfo.rb', line 63 def flags flags = [] @flags.bytesize.times do |i| if @flags.getbyte(i) > 0 flags << DB::BOOLEAN_LIST.fetch(i) end end flags end |
#getflag(name) ⇒ Object
91 92 93 |
# File 'lib/termtime/terminfo.rb', line 91 def getflag name @flags.getbyte(DB::BOOLEANS.fetch(name).i) == 1 end |
#getnum(name) ⇒ Object
86 87 88 89 |
# File 'lib/termtime/terminfo.rb', line 86 def getnum name offset = DB::NUMBERS.fetch(name).i * 2 @numbers.getbyte(offset) | (@numbers.getbyte(offset + 1) << 8) end |
#getstr(name) ⇒ Object
95 96 97 |
# File 'lib/termtime/terminfo.rb', line 95 def getstr name str(name).value end |
#names ⇒ Object
107 108 109 |
# File 'lib/termtime/terminfo.rb', line 107 def names @names.split("|") end |
#numbers ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/termtime/terminfo.rb', line 73 def numbers numbers = [] @numbers.unpack("s*").each_with_index do |v, i| next if v == -1 numbers << Number.new(v, DB::NUMBER_LIST.fetch(i)) end numbers end |
#str(name) ⇒ Object
99 100 101 |
# File 'lib/termtime/terminfo.rb', line 99 def str name @strings.fetch(name) end |
#str?(name) ⇒ Boolean
103 104 105 |
# File 'lib/termtime/terminfo.rb', line 103 def str? name @strings.key?(name) end |
#strings ⇒ Object
82 83 84 |
# File 'lib/termtime/terminfo.rb', line 82 def strings @strings.values end |