blob: d79fbe330a6083f0fbafb9a5bb25a3db9791fae7 [file] [log] [blame] [raw]
local component = require("component")
local fs = require("filesystem")
local shell = require("shell")
local dirs, options = shell.parse(...)
if #dirs == 0 then
table.insert(dirs, ".")
end
io.output():setvbuf("line")
for i = 1, #dirs do
local path = shell.resolve(dirs[i])
if #dirs > 1 then
if i > 1 then
io.write("\n")
end
io.write(path, ":\n")
end
local list, reason = fs.list(path)
if not list then
io.write(reason .. "\n")
else
local function setColor(c)
if component.gpu.getForeground() ~= c then
io.stdout:flush()
component.gpu.setForeground(c)
end
end
local lsd = {}
local lsf = {}
for f in list do
if f:sub(-1) == "/" then
table.insert(lsd, f)
else
table.insert(lsf, f)
end
end
table.sort(lsd)
table.sort(lsf)
setColor(0x99CCFF)
for _, d in ipairs(lsd) do
if options.a or d:sub(1, 1) ~= "." then
io.write(d .. "\t")
if options.l or io.output() ~= io.stdout then
io.write("\n")
end
end
end
for _, f in ipairs(lsf) do
if fs.isLink(fs.concat(path, f)) then
setColor(0xFFAA00)
elseif f:sub(-4) == ".lua" then
setColor(0x00FF00)
else
setColor(0xFFFFFF)
end
if options.a or f:sub(1, 1) ~= "." then
io.write(f .. "\t")
if options.l then
setColor(0xFFFFFF)
io.write(fs.size(fs.concat(path, f)), "\n")
elseif io.output() ~= io.stdout then
io.write("\n")
end
end
end
setColor(0xFFFFFF)
if not options.l then
io.write("\n")
end
end
end
io.output():setvbuf("no")