mirror of
https://github.com/clockworkpi/PicoCalc.git
synced 2026-03-20 11:02:37 +01:00
update PicoCalc SD
This commit is contained in:
74
Bin/PicoCalc SD/lua/browser.lua
Normal file
74
Bin/PicoCalc SD/lua/browser.lua
Normal file
@@ -0,0 +1,74 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user