summaryrefslogtreecommitdiffstats
path: root/.config/awesome/functions/run_once.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/awesome/functions/run_once.lua')
-rw-r--r--.config/awesome/functions/run_once.lua35
1 files changed, 35 insertions, 0 deletions
diff --git a/.config/awesome/functions/run_once.lua b/.config/awesome/functions/run_once.lua
new file mode 100644
index 0000000..7c57482
--- /dev/null
+++ b/.config/awesome/functions/run_once.lua
@@ -0,0 +1,35 @@
+local awful = require("awful")
+local lfs = require("lfs")
+
+local function processwalker()
+ local function yieldprocess()
+ for dir in lfs.dir("/proc") do
+ if tonumber(dir) ~= nil then
+ local f, err = io.open("/proc/"..dir.."/cmdline")
+ if f then
+ local cmdline = f:read("*all")
+ f:close()
+ if cmdline ~= "" then
+ coroutine.yield(cmdline)
+ end
+ end
+ end
+ end
+ end
+ return coroutine.wrap(yieldprocess)
+end
+
+function run_once(process, cmd)
+ assert(type(process) == "string")
+ local regex_killer = {
+ ["+"] = "%+", ["-"] = "%-",
+ ["*"] = "%*", ["?"] = "%?" }
+
+ for p in processwalker() do
+ if p:find(process:gsub("[-+?*]", regex_killer)) then
+ return
+ end
+ end
+ return awful.spawn(cmd or process)
+end
+-- run once END