include :subprocess
include :cffi
cffi.cdef "int isatty(int fd);"
terminal = object.new
terminal.print = object->print
terminal.tty? = {
cffi[:isatty, 1] == 1
}
terminal.height = {
subprocess.run("tput lines").to_i
}
terminal.lines = terminal->height
terminal.width = {
subprocess.run("tput cols").to_i
}
terminal.cols = terminal->width
terminal.up = { n = null |
print "\27[#{n}A"
}
terminal.down = { n = null |
print "\27[#{n}B"
}
terminal.right = { n = null |
print "\27[#{n}C"
}
terminal.left = { n = null |
print "\27[#{n}D"
}
terminal.to = { x, y |
print "\27[#{y + 1};#{x + 1}H"
}
terminal.at = { x, y, str |
terminal.to x, y
print str
}
terminal.clear = {
print "\27[2;J\27[H"
}
export terminal, :terminal