在最小化窗口之间循环,同时保持位置



所以我有这个键绑定:

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 仓位,而任何最小化的客户将沿着剩余仓位形成队列。方便的是,生成一个新客户端会给它焦点,使其成为主客户端,并将其放在第一个位置,因此保持顺序。

它有效 ̄\_(ツ)_/̄

最新更新