48 lines
699 B
Ruby
48 lines
699 B
Ruby
class Terminal
|
|
|
|
def initialize(width, height)
|
|
@screen = TSM::Screen.new(width, height)
|
|
@vte = TSM::Vte.new(@screen)
|
|
end
|
|
|
|
def feed(data)
|
|
vte.input(data)
|
|
end
|
|
|
|
def snapshot
|
|
lines = []
|
|
last_y = nil
|
|
line = nil
|
|
|
|
cur_text, cur_attr = nil
|
|
|
|
screen.draw do |x, y, char, attr|
|
|
line = lines[y]
|
|
|
|
unless line
|
|
lines[y] = line = []
|
|
cur_text = nil
|
|
end
|
|
|
|
if cur_text && attr == cur_attr
|
|
cur_text << char
|
|
else
|
|
cur_text, cur_attr = char, attr
|
|
line << [cur_text, cur_attr]
|
|
end
|
|
end
|
|
|
|
lines
|
|
end
|
|
|
|
def release
|
|
screen.release
|
|
vte.release
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :screen, :vte
|
|
|
|
end
|