You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.0 KiB
78 lines
2.0 KiB
---AwesomeWM autorun system
|
|
-- This module provides a way to start up applications on desktop boot
|
|
-- It's like cron's @reboot but with additional awesomewm specific features
|
|
local awful = require("awful")
|
|
local rcfile = io.open(global.config_dir.."rc.lua")
|
|
local execute
|
|
-- why thank you lua changes, i appreciate this shit.
|
|
-- (luajit is deprecated my ASS, find me a faster version then)
|
|
if _VERSION ~= "Lua 5.1" then
|
|
execute = function(comm)
|
|
return select(3,os.execute(comm))
|
|
end
|
|
else
|
|
execute = os.execute
|
|
end
|
|
local execd = {}
|
|
-- load persistent file for "o" tag
|
|
local execd_file = io.open("/tmp/awesomerc.started","r")
|
|
if execd_file then
|
|
execd_file:read("*a"):gsub("[^\n]+",function(prg)
|
|
execd[prg] = true
|
|
end)
|
|
execd_file:close()
|
|
end
|
|
execd_file = io.open("/tmp/awesomerc.started","w")
|
|
local function check_pid(prg)
|
|
local args = {}
|
|
prg:gsub("[^%s ]+",function(name)
|
|
args[#args+1] = name
|
|
end)
|
|
local prgname
|
|
for _,prgn in pairs(args) do
|
|
if prgn:match("^[^=]+$") then
|
|
prgname = prgn:match("[^/]+$"):sub(1,15)
|
|
break
|
|
end
|
|
end
|
|
if execute("pgrep "..prgname) == 0 then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
local function check_once(prg)
|
|
if not execd[prg] then
|
|
execd[prg] = true
|
|
execd_file:write(tostring(prg).."\n")
|
|
return true
|
|
end
|
|
end
|
|
local function apply_tags(k,prg)
|
|
if k:match("n") and (check_pid(prg)) then
|
|
return false
|
|
end
|
|
if k:match("o") and (not check_once(prg)) then
|
|
return false
|
|
end
|
|
awful.spawn(prg)
|
|
return true
|
|
end
|
|
|
|
if rcfile then
|
|
local rc,err = load(rcfile:read("*a"))
|
|
rcfile:close()
|
|
local rcdata
|
|
if not err then
|
|
rcdata = rc()
|
|
else
|
|
require("naughty").notify({
|
|
title = "Error reading rc.lua",
|
|
text = err
|
|
})
|
|
end
|
|
for entry,command in pairs(rcdata or {}) do
|
|
apply_tags(entry,command)
|
|
end
|
|
end
|
|
execd_file:close()
|