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