bindings: enhance the way the Pidgin conversation window is selected

There is now some cycle stuff. This is still not perfect since it will
bring some random window. It would be better to be able to choose the
appropriate one.
This commit is contained in:
Vincent Bernat 2012-12-15 14:17:06 +01:00
parent 8bce8a5528
commit b6f1ee8646

View file

@ -80,7 +80,9 @@ end
-- Toggle pidgin conversation window
local toggle_pidgin = toggle_window(
function ()
(function ()
local adding = true
local choose = function()
local cls = client.get()
local focus = client.focus
local rule = { class = "Pidgin",
@ -99,8 +101,10 @@ local toggle_pidgin = toggle_window(
local visible = cl:isvisible()
if urgent and visible and not focused then return 100 end
if urgent and not visible and not focused then return 90 end
if not urgent and not visible then return 80 end
if not adding and focused then return 80 end
if adding and not urgent and not visible then return 70 end
if focused then return 50 end
if not urgent and not visible then return 40 end
return 10
end
table.sort(cls, function(c1, c2)
@ -108,8 +112,17 @@ local toggle_pidgin = toggle_window(
local s2 = score(c2)
return s1 > s2
end)
if awful.rules.match(cls[1], rule) then return cls[1] end
end)
local candidate = cls[1]
if candidate == nil or not awful.rules.match(candidate, rule) then return nil end
-- Maybe we need to switch direction
if candidate == focus and adding then adding = false
elseif candidate ~= focus and not adding then adding = true end
return candidate
end
return choose
end)())
-- Toggle urgent window
local toggle_urgent = toggle_window(awful.client.urgent.get)