summaryrefslogtreecommitdiffstats
path: root/modules/desktop/awesome/scratch.lua
diff options
context:
space:
mode:
Diffstat (limited to 'modules/desktop/awesome/scratch.lua')
-rw-r--r--modules/desktop/awesome/scratch.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/desktop/awesome/scratch.lua b/modules/desktop/awesome/scratch.lua
new file mode 100644
index 0000000..aa1fd1e
--- /dev/null
+++ b/modules/desktop/awesome/scratch.lua
@@ -0,0 +1,54 @@
+local client = client
+
+local awful = require("awful")
+local util = require("awful.util")
+
+local scratch = {}
+
+local function activate(c)
+ local ctag = awful.tag.selected(c.screen)
+ ctags = {ctag}
+ for k,tag in pairs(c:tags()) do
+ if tag ~= ctag then table.insert(ctags, tag) end
+ end
+ c:tags(ctags)
+ c:raise()
+ client.focus = c
+end
+
+local function deactivate(c)
+ local ctag = awful.tag.selected(c.screen)
+ ctags = {}
+ for k,tag in pairs(c:tags()) do
+ if tag ~= ctag then table.insert(ctags, tag) end
+ end
+ c:tags(ctags)
+end
+
+function scratch.raise(cmd, rule)
+ local rule = rule or { instance = "scratch" }
+ local function match(c) return awful.rules.match(c, rule) end
+
+ local clients = client.get()
+ local findex = util.table.hasitem(clients, client.focus) or 1
+ local start = util.cycle(#clients, findex + 1)
+
+ for c in awful.client.iterate(match, start) do
+ activate(c)
+ return
+ end
+
+ util.spawn(cmd)
+end
+
+function scratch.toggle(cmd, rule)
+ local rule = rule or { instance = "scratch" }
+
+ if client.focus and awful.rules.match(client.focus, rule) then
+ deactivate(client.focus)
+ else
+ scratch.raise(cmd)
+ end
+end
+
+return scratch