所以我有了这个键盘绑定:
awful.key({modkey}, ";",
function()
if client.focus then
for c in awful.client.iterate(function(x) return x.minimized end) do
c.minimized = false
client.focus.minimized = true
client.focus = c
client.focus:raise()
break
end
end
end
目的是将关注的客户端与第一个最小化的客户端交换,但不是一个简单的周期,因为我希望它与屏幕上有多少未最小化的客户端无关。它可以按预期工作,但不能保留客户端在屏幕上的位置。据我所知,如果新近未关注和关注的客户的索引要比第二高未关注的客户更高,那么它将始终位于屏幕之后,并且我不知道该如何解决这个。
虽然它无助于澄清我遇到的问题,但这是我为了实现我所想到的目标而想出的解决方法:
if client.focus then
local c = client.focus
local nxt = nil
for x in awful.client.iterate(function(x) return x.minimized end) do
if nxt then nxt:swap(x) else nxt = x end
end
c.minimized = true
nxt.minimized = false
c:swap(nxt)
client.focus = nxt
end
我决定放弃使客户保持其原始顺序,取而代之的是,任何x个未最小化的客户将占据客户表中的1-x位置,而任何最小化的客户将沿着其余位置形成队列。方便地,产生一个新客户可以使它集中精力,使其成为母版,并将其放在第一位,因此可以保持顺序。
它起作用¯\ _(ツ)_ /¯