diff options
author | Tom Willemsen | 2012-10-07 15:23:23 +0200 |
---|---|---|
committer | Tom Willemsen | 2012-10-07 15:23:23 +0200 |
commit | 52abe4f88168002420813e20751d772023d96718 (patch) | |
tree | d87aeefe7ca798fd8cdb911d932a2712944f5ca3 /.config/awesome/ext.lua | |
parent | 5b8d412cf79168fc6cdd45eac3ce65934d1f7b8d (diff) | |
parent | 049a44b608aacbaf1f040183def77fd7e7243fe3 (diff) | |
download | dotfiles-52abe4f88168002420813e20751d772023d96718.tar.gz dotfiles-52abe4f88168002420813e20751d772023d96718.zip |
Merge remote-tracking branch 'origin/master' into phoenix
Conflicts:
.config/awesome/rc.lua
Diffstat (limited to '.config/awesome/ext.lua')
-rw-r--r-- | .config/awesome/ext.lua | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/.config/awesome/ext.lua b/.config/awesome/ext.lua new file mode 100644 index 0000000..d564867 --- /dev/null +++ b/.config/awesome/ext.lua @@ -0,0 +1,67 @@ +local client=client +local awful=awful +local pairs=pairs +local table=table + +module("ext") + +-- Returns true if all pairs in table1 are present in table2 +function match(table1, table2) + for k, v in pairs(table1) do + if table[k] ~= v and not table2[k]:find(v) then + return false + end + end + + return true +end + +--- 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 +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 n == 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() + awful.screen.focus(c.screen) + return + end + awful.util.spawn(cmd) +end |