Last active
March 2, 2025 13:02
-
-
Save intrntbrn/08af1058d887f4d10a464c6f272ceafa to your computer and use it in GitHub Desktop.
awesomewm fancy_taglist: a taglist that contains a tasklist for each tag
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- awesomewm fancy_taglist: a taglist that contains a tasklist for each tag. | |
-- Usage: | |
-- 1. Save as "fancy_taglist.lua" in ~/.config/awesome | |
-- 2. Add a fancy_taglist for every screen: | |
-- awful.screen.connect_for_each_screen(function(s) | |
-- ... | |
-- local fancy_taglist = require("fancy_taglist") | |
-- s.mytaglist = fancy_taglist.new({ | |
-- screen = s, | |
-- taglist_buttons = mytagbuttons, | |
-- tasklist_buttons = mytasklistbuttons | |
-- }) | |
-- ... | |
-- end) | |
-- 3. Add s.mytaglist to your wibar. | |
local awful = require("awful") | |
local wibox = require("wibox") | |
local module = {} | |
local generate_filter = function(t) | |
return function(c, scr) | |
local ctags = c:tags() | |
for _, v in ipairs(ctags) do | |
if v == t then | |
return true | |
end | |
end | |
return false | |
end | |
end | |
local fancytasklist = function(cfg, t) | |
return awful.widget.tasklist({ | |
screen = cfg.screen or awful.screen.focused(), | |
filter = generate_filter(t), | |
buttons = cfg.tasklist_buttons, | |
widget_template = { | |
{ | |
id = "clienticon", | |
widget = awful.widget.clienticon, | |
}, | |
layout = wibox.layout.stack, | |
create_callback = function(self, c, _, _) | |
self:get_children_by_id("clienticon")[1].client = c | |
awful.tooltip({ | |
objects = { self }, | |
timer_function = function() | |
return c.name | |
end, | |
}) | |
end, | |
}, | |
}) | |
end | |
function module.new(config) | |
local cfg = config or {} | |
local s = cfg.screen or awful.screen.focused() | |
local taglist_buttons = cfg.taglist_buttons | |
return awful.widget.taglist({ | |
screen = s, | |
filter = awful.widget.taglist.filter.all, | |
widget_template = { | |
{ | |
{ | |
-- tag | |
{ | |
id = "text_role", | |
widget = wibox.widget.textbox, | |
align = "center", | |
}, | |
-- tasklist | |
{ | |
id = "tasklist_placeholder", | |
layout = wibox.layout.fixed.horizontal, | |
}, | |
layout = wibox.layout.fixed.horizontal, | |
}, | |
id = "background_role", | |
widget = wibox.container.background, | |
}, | |
layout = wibox.layout.fixed.horizontal, | |
create_callback = function(self, _, index, _) | |
local t = s.tags[index] | |
self:get_children_by_id("tasklist_placeholder")[1]:add(fancytasklist(cfg, t)) | |
end, | |
}, | |
buttons = taglist_buttons, | |
}) | |
end | |
return module |
can you please provide a screenshot?
Thanks, that looks AWESOME
Is it possible to use it with awful.widget.taglist.filter.noempty
, I see displaying all tags are hardcoded in script
@madhur, try replacing line 67 filter = awful.widget.taglist.filter.all
with filter = awful.widget.taglist.filter.noempty
and replacing lines 88-91 with
create_callback = function(self, tag, index, _)
self:get_children_by_id("tasklist_placeholder")[1]:add(fancytasklist(cfg, tag))
end,
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks!