mirror of
https://github.com/clockworkpi/PicoCalc.git
synced 2026-03-19 02:22:37 +01:00
74 lines
1.8 KiB
Lua
74 lines
1.8 KiB
Lua
local current_dir = "/"
|
|
local cursor_y = 1
|
|
local width, height = term.getSize()
|
|
|
|
function string:endswith(suffix)
|
|
return self:sub(-#suffix) == suffix
|
|
end
|
|
|
|
term.clear()
|
|
while true do
|
|
local dir = fs.list(current_dir)
|
|
term.setCursorPos(1,1)
|
|
|
|
table.sort(dir, function(a, b) return string.upper(a.name) < string.upper(b.name) end)
|
|
local folders = {}
|
|
local files = {}
|
|
for _,v in pairs(dir) do
|
|
if v.isDir then table.insert(folders, v)
|
|
else table.insert(files, v) end
|
|
end
|
|
table.sort(files, function(a, b) return a.name < b.name end)
|
|
dir = folders
|
|
for _,v in ipairs(files) do
|
|
table.insert(dir, v)
|
|
end
|
|
|
|
if current_dir > "/" then
|
|
table.insert(dir, 1, {name="..", isDir=true})
|
|
end
|
|
|
|
local off = 0
|
|
if #dir > height-2 then
|
|
off = math.floor(cursor_y / #dir * (#dir - height + 3))
|
|
end
|
|
|
|
for y = 1, height - 2 do
|
|
local yoff = y + off
|
|
local v = dir[yoff]
|
|
if v then
|
|
local str = ""
|
|
if v.isDir then str = str .. "\27[93m"
|
|
elseif v.name:endswith(".lua") then str = str .. "\27[96m"
|
|
else str = str .. "\27[97m" end
|
|
if yoff == cursor_y then str = str .. "\27[7m" end
|
|
term.write(str .. v.name .. "\27[m\27[K\n")
|
|
else
|
|
term.write("\27[K\n")
|
|
end
|
|
end
|
|
|
|
term.write("\n\27[93mCurrent directory: " .. current_dir .. "\27[m\27[K")
|
|
|
|
local state, _, code = keys.wait(true, true)
|
|
|
|
if code == keys.up then
|
|
cursor_y = ((cursor_y - 2) % #dir) + 1
|
|
elseif code == keys.down then
|
|
cursor_y = ((cursor_y) % #dir) + 1
|
|
elseif code == keys.enter then
|
|
if dir[cursor_y].isDir then
|
|
if dir[cursor_y].name == ".." then
|
|
current_dir = current_dir:match("(.*/).*/") or '/'
|
|
else
|
|
current_dir = current_dir .. dir[cursor_y].name .. '/'
|
|
end
|
|
cursor_y = 1
|
|
elseif dir[cursor_y].name:endswith(".lua") then
|
|
edit(current_dir .. dir[cursor_y].name)
|
|
end
|
|
elseif code == keys.esc then
|
|
break
|
|
end
|
|
end
|
|
term.clear() |