summaryrefslogblamecommitdiffstats
path: root/modules/desktop/awesome/scratch.lua
blob: aa1fd1e16b1052c38943097ea1b51851b5cb3000 (plain) (tree)





















































                                                                  
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