local ipairs = ipairs
local pairs = pairs
local awful = require("awful")
local naughty = require("naughty")
local table = table
local capi = {
tag = tag,
mouse = mouse,
client = client,
screen = screen,
wibox = wibox,
timer = timer,
keygrabber = keygrabber,
}
module("eminent")
local deflayout = nil
local orig = {
new = awful.tag.new,
viewidx = awful.tag.viewidx,
taglist = awful.widget.taglist.new,
label = awful.widget.taglist.label.all,
}
function gettags(screen)
local tags = {}
for k, t in ipairs(capi.screen[screen]:tags()) do
if t.selected or #t:clients() > 0 then
awful.tag.setproperty(t, "hide", false)
table.insert(tags, t)
else
awful.tag.setproperty(t, "hide", true)
end
end
return tags
end
awful.tag.new = function (names, screen, layout)
deflayout = layout and layout[1] or layout
return orig.new(names, screen, layout)
end
awful.tag.viewidx = function (i, screen)
local s = screen and screen.index or capi.mouse.screen
local ctags = capi.screen[s]:tags()
local tags = gettags(s)
local sel = awful.tag.selected()
local selidx = awful.util.table.hasitem(tags, sel)
local tagidx = awful.util.table.hasitem(ctags, sel)
if selidx == #tags and i == 1 and #sel:clients() > 0 then
awful.tag.viewnone(s)
if #ctags >= tagidx+1 then
ctags[tagidx+1].selected = true
else
local tag = capi.tag { name = ""..(tagidx+1) }
tag.screen = s
tag.selected = true
awful.tag.setproperty(tag, "layout", deflayout)
end
else
orig.viewidx(i, screen)
end
end
awful.widget.taglist.label.all = function (t, args)
if t.selected or #t:clients() > 0 then
return orig.label(t, args)
end
end
local function uc(c) gettags(c.screen) end
local function ut(s, t) gettags(s.index) end
capi.client.add_signal("unmanage", uc)
capi.client.add_signal("new", function(c)
c:add_signal("property::screen", uc)
c:add_signal("tagged", uc)
c:add_signal("untagged", uc)
end)
for screen=1, capi.screen.count() do
awful.tag.attached_add_signal(screen, "property::selected", uc)
capi.screen[screen]:add_signal("tag::attach", ut)
capi.screen[screen]:add_signal("tag::detach", ut)
end