From d04eeacb36af9fc69842932462ab8b6ec6e1efe0 Mon Sep 17 00:00:00 2001 From: hkc Date: Fri, 20 Oct 2023 03:03:10 +0300 Subject: [PATCH] Gracefully handle small terminal Also fuck it, global terminal size again --- mess/tmpc.lua | 43 ++++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/mess/tmpc.lua b/mess/tmpc.lua index bde4d20..0853af2 100644 --- a/mess/tmpc.lua +++ b/mess/tmpc.lua @@ -27,6 +27,36 @@ settings.define("mplayer.colors.status", { default = 0x80EF80, -- #80EF80 type = number }) + +local tw, th = term.getSize() + +os.queueEvent("dummy") +while tw < 20 or th < 10 do + local ev = { os.pullEvent() } + term.clear() + term.setCursorPos(1, 1) + printError("Too small: " .. tw .. "x" .. th .. " < 20x10") + printError("Q to exit") + printError("Y to ignore") + + local setTextScale = term.current().setTextScale + if setTextScale ~= nil then + printError("S to try rescaling") + end + printError("I'll wait while you're adding more") + + if ev[1] == "term_resize" then + tw, th = term.getSize() + elseif ev[1] == "key" and ev[2] == keys.s and setTextScale ~= nil then + setTextScale(0.5) + elseif ev[1] == "key" and ev[2] == keys.y then + break + elseif ev[1] == "key" and ev[2] == keys.q then + return + end +end + + local drive = peripheral.find("tape_drive") if not drive then printError("No drive found, starting in dummy mode") @@ -146,7 +176,6 @@ local mplayer = { title = "Help", scroll = 0, render = function(self) - local tw, th = term.getSize() for i = 1, th - 3 do local line = help[i + self.screens[1].scroll] or "~" term.setCursorPos(1, i + 1) @@ -165,7 +194,6 @@ local mplayer = { end end, handleKey = function(self, key, repeating) - local _, th = term.getSize() if key == keys.down or key == keys.j then self.screens[1].handleScroll(self, 1) elseif key == keys.up or key == keys.k then @@ -177,7 +205,6 @@ local mplayer = { end end, handleScroll = function(self, direction, x, y) - local _, th = term.getSize() self.screens[1].scroll = math.max(0, math.min(th - 1, self.screens[1].scroll + direction)) end, }, @@ -187,7 +214,6 @@ local mplayer = { cursor = 1, textScroll = 0, render = function(self) - local tw, th = term.getSize() for i = 1, th - 3 do local song = self.songs[i + self.screens[2].scroll] local isCurrent = (i + self.screens[2].scroll) == self.currentSong @@ -214,7 +240,6 @@ local mplayer = { end end, handleKey = function(self, key, repeating) - local _, th = term.getSize() if key == keys.down or key == keys.j then self.screens[2].handleScroll(self, 1) elseif key == keys.up or key == keys.k then @@ -231,7 +256,6 @@ local mplayer = { end end, handleScroll = function(self, direction, x, y) - local _, th = term.getSize() self.screens[2].cursor = math.max(1, math.min(#self.songs, self.screens[2].cursor + direction)) if self.screens[2].scroll + 1 > self.screens[2].cursor then self.screens[2].scroll = self.screens[2].cursor - 1 @@ -252,7 +276,6 @@ local mplayer = { term.write(string.format("opt = %d, scroll = %d", self.screens[3].cursor, self.screens[3].scroll)) end, handleKey = function(self, key, repeating) - local _, th = term.getSize() if key == keys.down or key == keys.j then self.screens[3].handleScroll(self, 1) elseif key == keys.up or key == keys.k then @@ -264,7 +287,6 @@ local mplayer = { end end, handleScroll = function(self, direction, x, y) - local _, th = term.getSize() self.screens[3].cursor = math.max(1, math.min(20, self.screens[3].cursor + direction)) if self.screens[3].scroll + 1 > self.screens[3].cursor then self.screens[3].scroll = self.screens[3].cursor - 1 @@ -293,8 +315,6 @@ term.clear() parallel.waitForAny( function() while true do - local tw, th = term.getSize() - -- Current screen term.setCursorPos(1, 2) mplayer.screens[mplayer.currentScreen].render(mplayer) @@ -359,7 +379,6 @@ function() local pretty = require("cc.pretty") while true do local _evd = { os.pullEvent() } - local tw, th = term.getSize() local ev, evd = table.remove(_evd, 1), _evd if ev == "key" then mplayer.heldKeys[evd[1]] = evd[2] @@ -408,6 +427,8 @@ function() end cx = cx + #caption end + elseif ev == "term_resize" then + tw, th = term.getSize() elseif ev == "tape_removed" then mplayer.songs = {} elseif ev == "tape_inserted" then