Lua runner with rich builtin stdlib
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
a/lua/tui_term.lua

75 lines
2.5 KiB

-- Showcase of the tui terminal-control functions and markup action tags:
-- inline redraws, the alternate screen, absolute cursor addressing, scroll
-- regions. Needs a real terminal — piped, everything degrades to no-ops.
--
-- Run with: cargo run -- lua/tui_term.lua
tui.setTitle("tui terminal demo")
----------------------------------------------------------------------
-- 1. Inline progress: redraw one line with the <clear=line> action tag
----------------------------------------------------------------------
for i = 1, 30 do
tui.raw(tui.styled(("<clear=line>working <info>%d/30</info> %s"):format(i, ("#"):rep(i))))
os.sleep(0.03)
end
tui.raw(tui.styled("<clear=line>"))
tui.success("progress loop finished")
----------------------------------------------------------------------
-- 2. Full-screen: alternate screen + absolute cursor addressing
----------------------------------------------------------------------
tui.altScreen(true)
tui.clearScreen()
tui.showCursor(false)
local info = tui.screenInfo()
local w, h = info.width or 80, info.height or 24
tui.moveTo(2, 3)
tui.raw(tui.styled(("<info;b>alternate screen</> — %dx%d cells"):format(w, h)))
-- A little box drawn with moveTo.
for row = 4, 8 do
tui.moveTo(row, 3)
if row == 4 or row == 8 then
tui.raw("+" .. ("-"):rep(20) .. "+")
else
tui.raw("|" .. (" "):rep(20) .. "|")
end
end
tui.moveTo(6, 6)
tui.raw(tui.styled("<yellow>boxed content</>"))
tui.moveTo(10, 3)
tui.raw("where is the cursor? ")
local row, col = tui.cursorPos()
tui.raw(tui.styled(("at <b>row %s, col %s</b>"):format(tostring(row), tostring(col))))
tui.moveTo(12, 3)
tui.raw("back to the normal screen in 2 seconds...")
os.sleep(2)
tui.altScreen(false)
tui.showCursor(true)
print("back — scrollback intact.")
----------------------------------------------------------------------
-- 3. Scroll region: log lines scrolling under a fixed header
----------------------------------------------------------------------
print()
print(tui.styled("<b>FIXED HEADER</b> (lines below scroll, this one stays)"))
local top = select(1, tui.cursorPos())
if top then
tui.scrollRegion(top, top + 5)
for i = 1, 15 do
tui.moveTo(top + 5, 1)
tui.raw(("\nlog line %d"):format(i))
os.sleep(0.1)
end
tui.scrollRegion()
tui.moveTo(top + 6, 1)
end
print("scroll region reset.")
-- Deliberately no title restore: the runtime pops the pushed title (and
-- would also leave the alt screen / re-show the cursor) on exit.