local utils = { } local io = { popen = io.popen } local string = { match = string.match, lower = string.lower} utils.rules = { } utils.globalkeys = { } local host = io.popen("hostname") utils.host = host:read("*l") function utils.is_dir(path) return os.execute(('[ -d "%s" ]'):format(path)) end local function terminal_cmd(prg, name) local join = require("gears.table").join local term_cmd = {terminal} if name then if terminal:match("rxvt") then term_cmd = join(term_cmd, {"-name", name}) end end return join(term_cmd, {"-e", prg}) end function utils.spawn_terminal(prg, cprop, cb) if not cprop then cprop = {} end local name = cprop.instance awful.spawn(terminal_cmd(prg, name), cprop, cb) end function utils.spawn_terminal_once(prg, rules, matcher, unique_id, cb) local name = rules.instance awful.spawn.once(terminal_cmd(prg, name), rules, matcher, unique_id, cb) end function utils.run_or_kill(prg, cprop, screen) if not prg then do return nil end end if not cprop then cprop = { } end if not cprop.class then cprop.class = prg end if not cprop.instance then cprop.instance = "" end cprop.class = string.lower(cprop.class) cprop.instance = string.lower(cprop.instance) for k, c in pairs(client.get()) do -- apparently some steam games don't have a client class if c.class == nil then return end local class=string.lower(c.class) local instance=string.lower(c.instance) if string.match(class, cprop.class) and string.match(instance, cprop.instance) then for i, v in ipairs(c:tags()) do c:kill() return end end end awful.spawn.with_shell(prg, screen) end -- http://awesome.naquadah.org/wiki/Autostart#Simple_way function utils.run_once(prg,arg_string,pname,screen) if not prg then do return nil end end if not pname then pname = prg end if not arg_string then awful.spawn.with_shell("pgrep -f -u $USER -x '" .. pname .. "' || (" .. prg .. ")",screen) else awful.spawn.with_shell("pgrep -f -u $USER -x '" .. pname .. " ".. arg_string .."' || (" .. prg .. " " .. arg_string .. ")",screen) end end function utils.get_default_sink() local f = io.popen('pactl get-default-sink') line = f:read('*l') f:close() return string.match(line, "^sink%s*%d*%s*(.-)%s") end function utils.joinTables(t1, t2) for k,v in ipairs(t2) do table.insert(t1, v) end return t1 end function utils.rules.append(rules) awful.rules.rules = gears.table.join(awful.rules.rules, rules) end function utils.globalkeys.append(keys) globalkeys = gears.table.join(globalkeys, keys) end function utils.has_battery() return utils.is_dir("/sys/class/power_supply/BAT0") end return utils