OC-KittenOS/repository/apps/app-slaunch.lua

71 lines
1.7 KiB
Lua

-- This is released into the public domain.
-- No warranty is provided, implied or otherwise.
-- app-slaunch: searching launcher
-- Authors: Izaya
local event = require("event")(neo)
local neoux, err = require("neoux")
if not neoux then error(err) end
neoux = neoux(event, neo)
local running = true
local buttons = {}
local appNames = neo.listApps()
local searchTerm = ""
function searchApps(str)
local rt = {}
for k,v in ipairs(appNames) do
if v:sub(1, 4) == "app-" then
if v:find(str) then
rt[#rt+1] = v
end
end
end
return rt
end
function genWindow(apps)
local wwidth, wheight, wcontents = 1, 1, {}
for k,v in pairs(apps) do
appname = v:sub(5)
if appname:len()+2 > wwidth then
wwidth = appname:len()+2
end
table.insert(wcontents, neoux.tcbutton(1, wheight+1, appname, function(w)
local pid, err = neo.executeAsync(v)
if not pid then
neoux.startDialog(tostring(err), "launchErr")
else
w.close()
running = false
end
end))
wheight = wheight + 1
end
wwidth = math.max(wwidth, 11)
table.insert(wcontents,1,neoux.tcfield(1,1,wwidth,function(nv)
if not nv then return searchTerm end
searchTerm = nv
local sapps = searchApps(searchTerm)
local fwwidth, fwheight, fwcontents = genWindow(sapps)
window.reset(fwwidth, fwheight, nil, neoux.tcwindow(fwwidth, fwheight, fwcontents, function(w)
w.close()
running = false
end, 0xFFFFFF, 0))
end))
return wwidth, wheight, wcontents
end
wwidth, wheight, wcontents = genWindow(searchApps(searchTerm))
window = neoux.create(wwidth, wheight, nil, neoux.tcwindow(wwidth, wheight, wcontents, function (w)
w.close()
running = false
end, 0xFFFFFF, 0))
while running do
event.pull()
end