Add partial support for taglist extensions (issue #25)
This commit is contained in:
parent
dbc0ccfbcb
commit
e1656169a2
|
@ -0,0 +1,108 @@
|
||||||
|
-- This file provide extensions
|
||||||
|
|
||||||
|
local capi = { screen = screen, client=client}
|
||||||
|
local setmetatable = setmetatable
|
||||||
|
local ipairs,pairs = ipairs,pairs
|
||||||
|
local type = type
|
||||||
|
local radical = require( "radical" )
|
||||||
|
local beautiful = require( "beautiful" )
|
||||||
|
local awful = require( "awful" )
|
||||||
|
local util = require( "awful.util" )
|
||||||
|
local wibox = require( "wibox" )
|
||||||
|
local taglist = nil
|
||||||
|
|
||||||
|
local module = {}
|
||||||
|
|
||||||
|
local current_client = nil
|
||||||
|
|
||||||
|
local classes = {}
|
||||||
|
local global = {}
|
||||||
|
|
||||||
|
local extension_list = {}
|
||||||
|
|
||||||
|
local per_m,per_glob,per_this = nil
|
||||||
|
local function persistence_menu(ext)
|
||||||
|
if not taglist then
|
||||||
|
taglist = require("radical.impl.taglist")
|
||||||
|
end
|
||||||
|
if not per_m then
|
||||||
|
per_m = radical.context{}
|
||||||
|
per_glob = per_m:add_item{text= "All clients" ,checkable = true , button1 = function()
|
||||||
|
local i1 = taglist.item(current_client)
|
||||||
|
if i1 and (not i1._internal.has_widget or not i1._internal.has_widget[ext]) then
|
||||||
|
i1:add_suffix(ext(current_client))
|
||||||
|
i1._internal.has_widget = i1._internal.has_widget or {}
|
||||||
|
i1._internal.has_widget[ext] = true
|
||||||
|
end
|
||||||
|
for k,v in ipairs(capi.client.get()) do
|
||||||
|
local i2 = taglist.item(v)
|
||||||
|
if i2 and (not i2._internal.has_widget or not i2._internal.has_widget[ext]) then
|
||||||
|
i2:add_suffix(ext(v))
|
||||||
|
i2._internal.has_widget = i2._internal.has_widget or {}
|
||||||
|
i2._internal.has_widget[ext] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
per_glob.checked = true
|
||||||
|
end}
|
||||||
|
per_this = per_m:add_item{text= "This client only" ,checkable = true, button1 = function()
|
||||||
|
local i1 = taglist.item(current_client)
|
||||||
|
if i1 and (not i1._internal.has_widget or not i1._internal.has_widget[ext]) then
|
||||||
|
i1:add_suffix(ext(current_client))
|
||||||
|
i1._internal.has_widget = i1._internal.has_widget or {}
|
||||||
|
i1._internal.has_widget[ext] = true
|
||||||
|
end
|
||||||
|
per_this.checked = true
|
||||||
|
end}
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Check the checkboxes
|
||||||
|
local i1 = taglist.item(current_client)
|
||||||
|
if global[ext] then
|
||||||
|
per_glob.checked = true
|
||||||
|
per_this.checked = false
|
||||||
|
elseif classes[ext] and classes[ext][current_client.class] then
|
||||||
|
per_this.checked = false
|
||||||
|
per_glob.checked = false
|
||||||
|
elseif i1 and i1._internal.has_widget and i1._internal.has_widget[ext] then
|
||||||
|
per_this.checked = true
|
||||||
|
per_glob.checked = false
|
||||||
|
else
|
||||||
|
per_this.checked = false
|
||||||
|
per_glob.checked = false
|
||||||
|
end
|
||||||
|
|
||||||
|
return per_m
|
||||||
|
end
|
||||||
|
|
||||||
|
local ext_list_m = nil
|
||||||
|
local function extension_list_menu()
|
||||||
|
if not ext_list_m then
|
||||||
|
ext_list_m = radical.context{}
|
||||||
|
for k,v in pairs(extension_list) do
|
||||||
|
ext_list_m:add_item{text=k,sub_menu=function() return persistence_menu(v) end}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return ext_list_m
|
||||||
|
end
|
||||||
|
|
||||||
|
local ext_m = nil
|
||||||
|
function module.extensions_menu(c)
|
||||||
|
current_client = c
|
||||||
|
if not ext_m then
|
||||||
|
ext_m = radical.context{}
|
||||||
|
ext_m:add_item{text="Overlay widget", sub_menu=extension_list_menu() }
|
||||||
|
ext_m:add_item{text="Prefix widget" , sub_menu=extension_list_menu() }
|
||||||
|
ext_m:add_item{text="Suffix widget" , sub_menu=extension_list_menu() }
|
||||||
|
end
|
||||||
|
return ext_m
|
||||||
|
end
|
||||||
|
|
||||||
|
function module.add(name,f)
|
||||||
|
extension_list[name] = f
|
||||||
|
if ext_list_m then
|
||||||
|
ext_list_m:add_item{text=name,sub_menu=function() return persistence_menu(f) end}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
||||||
|
-- kate: space-indent on; indent-width 2; replace-tabs on;
|
|
@ -34,7 +34,7 @@ local cache = setmetatable({}, { __mode = 'k' })
|
||||||
module.buttons = { [1] = awful.tag.viewonly,
|
module.buttons = { [1] = awful.tag.viewonly,
|
||||||
[2] = awful.tag.viewtoggle,
|
[2] = awful.tag.viewtoggle,
|
||||||
[3] = function(q,w,e,r)
|
[3] = function(q,w,e,r)
|
||||||
local menu = tag_menu()
|
local menu = tag_menu(q)
|
||||||
menu.visible = true
|
menu.visible = true
|
||||||
end,
|
end,
|
||||||
[4] = function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end,
|
[4] = function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end,
|
||||||
|
@ -66,11 +66,21 @@ local function create_item(t,s)
|
||||||
local index = tag.getidx(t)
|
local index = tag.getidx(t)
|
||||||
tw:set_markup(" <b>"..(index).."</b> ")
|
tw:set_markup(" <b>"..(index).."</b> ")
|
||||||
w:add(tw)
|
w:add(tw)
|
||||||
local item = menu:add_item { text = t.name, prefix_widget = w}
|
local suf_w = wibox.layout.fixed.horizontal()
|
||||||
|
local item = menu:add_item { text = t.name, prefix_widget = w,suffix_widget=suf_w}
|
||||||
item._internal.icon_w = ib
|
item._internal.icon_w = ib
|
||||||
-- item:connect_signal("index::changed",function(_,value)
|
-- item:connect_signal("index::changed",function(_,value)
|
||||||
-- tw:set_markup(" <b>"..(index).."</b> ")
|
-- tw:set_markup(" <b>"..(index).."</b> ")
|
||||||
-- end)
|
-- end)
|
||||||
|
|
||||||
|
item.add_suffix = function(_,w2)
|
||||||
|
suf_w:add(w2)
|
||||||
|
end
|
||||||
|
item.add_prefix = function(_,w2)
|
||||||
|
w:add(w2)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
item.tw = tw
|
item.tw = tw
|
||||||
|
|
||||||
if tag.getproperty(t,"clone_of") then
|
if tag.getproperty(t,"clone_of") then
|
||||||
|
@ -216,7 +226,6 @@ local function new(s)
|
||||||
args["bg_"..v] = beautiful["taglist_bg_"..v]
|
args["bg_"..v] = beautiful["taglist_bg_"..v]
|
||||||
args["fg_"..v] = beautiful["taglist_fg_"..v]
|
args["fg_"..v] = beautiful["taglist_fg_"..v]
|
||||||
end
|
end
|
||||||
print("THAT",beautiful.taglist_bg_highlight)
|
|
||||||
|
|
||||||
instances[s] = radical.bar(args)
|
instances[s] = radical.bar(args)
|
||||||
|
|
||||||
|
@ -252,6 +261,10 @@ capi.tag.connect_signal("property::index2",function(t,i)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
function module.item(t)
|
||||||
|
return cache[t]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
||||||
-- kate: space-indent on; indent-width 2; replace-tabs on;
|
-- kate: space-indent on; indent-width 2; replace-tabs on;
|
||||||
|
|
|
@ -7,6 +7,7 @@ local menu = require( "radical.context" )
|
||||||
local com_tag = require( "radical.impl.common.tag" )
|
local com_tag = require( "radical.impl.common.tag" )
|
||||||
local awful = require("awful")
|
local awful = require("awful")
|
||||||
local radical = require("radical")
|
local radical = require("radical")
|
||||||
|
local extensions = require("radical.impl.taglist.extensions")
|
||||||
local capi = { screen = screen }
|
local capi = { screen = screen }
|
||||||
|
|
||||||
local module = {}
|
local module = {}
|
||||||
|
@ -78,6 +79,9 @@ local function new(t)
|
||||||
|
|
||||||
aTagMenu:add_item({text= "Flags", sub_menu = function()
|
aTagMenu:add_item({text= "Flags", sub_menu = function()
|
||||||
|
|
||||||
|
end})
|
||||||
|
aTagMenu:add_item({text= "Add widgets", sub_menu = function()
|
||||||
|
return extensions.extensions_menu(aTag)
|
||||||
end})
|
end})
|
||||||
return aTagMenu
|
return aTagMenu
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,7 +20,7 @@ local function reload(t,s)
|
||||||
local new_tags = tag.gettags(s)
|
local new_tags = tag.gettags(s)
|
||||||
for k,v in ipairs(new_tags) do
|
for k,v in ipairs(new_tags) do
|
||||||
if v ~= old_tags[k] then
|
if v ~= old_tags[k] then
|
||||||
print(v.name,k,s,tag.getscreen(v),tag.getidx(v))
|
-- print(v.name,k,s,tag.getscreen(v),tag.getidx(v))
|
||||||
v:emit_signal("property::index2",k)
|
v:emit_signal("property::index2",k)
|
||||||
screen_cache[v] = s
|
screen_cache[v] = s
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue