-
-
Save kozo2/5989452 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- Spawns cmd if no client can be found matching properties | |
-- If such a client can be found, pop to first tag where it is visible, and give it focus | |
-- @param cmd the command to execute | |
-- @param properties a table of properties to match against clients. Possible entries: any properties of the client object | |
function run_or_raise(cmd, properties) | |
local clients = client.get() | |
local focused = awful.client.next(0) | |
local findex = 0 | |
local matched_clients = {} | |
local n = 0 | |
for i, c in pairs(clients) do | |
--make an array of matched clients | |
if match(properties, c) then | |
n = n + 1 | |
matched_clients[n] = c | |
if c == focused then | |
findex = n | |
end | |
end | |
end | |
if n > 0 then | |
local c = matched_clients[1] | |
-- if the focused window matched switch focus to next in list | |
if 0 < findex and findex < n then | |
c = matched_clients[findex+1] | |
end | |
local ctags = c:tags() | |
if table.getn(ctags) == 0 then | |
-- ctags is empty, show client on current tag | |
local curtag = awful.tag.selected() | |
awful.client.movetotag(curtag, c) | |
else | |
-- Otherwise, pop to first tag client is visible on | |
awful.tag.viewonly(ctags[1]) | |
end | |
-- And then focus the client | |
client.focus = c | |
c:raise() | |
return | |
end | |
awful.util.spawn(cmd) | |
end | |
-- Returns true if all pairs in table1 are present in table2 | |
function match (table1, table2) | |
for k, v in pairs(table1) do | |
if table2[k] ~= v and not table2[k]:find(v) then | |
return false | |
end | |
end | |
return true | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment