From 219d3a8326ffecf1e93f822d3e1734fc2f24b7d5 Mon Sep 17 00:00:00 2001 From: XeonSquared Date: Fri, 4 Aug 2017 17:44:37 +1000 Subject: [PATCH] made luash nicer to use --- modules/applications/luash.lua | 39 ++++++++++++++++++++++++++++++---- modules/base/header.lua | 4 ++-- modules/lib/shutil.lua | 6 +++++- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/modules/applications/luash.lua b/modules/applications/luash.lua index 513e087..80412c6 100644 --- a/modules/applications/luash.lua +++ b/modules/applications/luash.lua @@ -5,10 +5,41 @@ spawn("lua shell",function() while true do write((os.getenv("PWD") or "").."> ") local inp=readln() - if inp:sub(1,1) == "=" then inp="return "..inp:sub(2) end - local r={pcall(load(inp))} - if r[1] == true then table.remove(r,1) end - print(table.unpack(r)) + if inp:sub(1,1) == "!" then + local pth = os.getenv("PATH") or "." + local s,ptt = inp:sub(2), {} + for w in s:gmatch("%S+") do table.insert(ptt,w) end + local prg = table.remove(ptt,1) + for d in pth:gmatch("[^:]+") do + _,lex = pcall(fs.exists,d.."/"..prg..".lua") + _,nex = pcall(fs.exists,d.."/"..prg) + if lex then + run(d.."/"..prg..".lua",table.unpack(ptt)) + break + elseif nex then + run(d.."/"..prg,table.unpack(ptt)) + break + end + end + elseif inp:sub(1,1) == "$" then + local s,ptt = inp:sub(2), {} + for w in s:gmatch("%S+") do table.insert(ptt,w) end + local prg = table.remove(ptt,1) + local r={pcall(_ENV[prg],table.unpack(ptt))} + if r[1] == true then + table.remove(r,1) + end + print(table.unpack(r)) + else + if inp:sub(1,1) == "=" then + inp="return "..inp:sub(2) + end + local r={pcall(load(inp))} + if r[1] == true then + table.remove(r,1) + end + print(table.unpack(r)) + end end end,si) end diff --git a/modules/base/header.lua b/modules/base/header.lua index 3bc8fbb..5a13a7c 100644 --- a/modules/base/header.lua +++ b/modules/base/header.lua @@ -20,9 +20,9 @@ do -- so local works tT[nP].n = n tT[nP].p = cT or -1 if tT[cT] then - tT[nP].u,tT[nP].ep,tT[nP].e = tT[cT].u,tT[cT].ep,e or tT[cT].e or {} + tT[nP].u,tT[nP].ep,tT[nP].e = tT[cT].u,tT[cT].ep,e or tT[cT].e or {["PWD"]="/boot",["PATH"]="/boot/exec:."} else - tT[nP].u,tT[nP].ep,tT[nP].e = "superuser",1,{} + tT[nP].u,tT[nP].ep,tT[nP].e = "superuser",1,{["PWD"]="/boot",["PATH"]="/boot/exec:."} end nP = nP + 1 end diff --git a/modules/lib/shutil.lua b/modules/lib/shutil.lua index 3cfd35e..e12374f 100644 --- a/modules/lib/shutil.lua +++ b/modules/lib/shutil.lua @@ -32,7 +32,11 @@ function loadfile(fn) return load(S) end function run(fn,...) - print(pcall(loadfile(fn),...)) + local r = {pcall(loadfile(fn),...)} + if r[1] == true then + table.remove(r,1) + end + print(table.unpack(r)) end function srun(fn,...) spawn(fn,print(pcall(loadfile(fn),...)))