最小化窗口之间的循环,同时保留位置

问题描述 投票:0回答:1

所以我有了这个键盘绑定:

  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

目的是将关注的客户端与第一个最小化的客户端交换,但不是一个简单的周期,因为我希望它与屏幕上有多少未最小化的客户端无关。它可以按预期工作,但不能保留客户端在屏幕上的位置。据我所知,如果新近未关注和关注的客户的索引要比第二高未关注的客户更高,那么它将始终位于屏幕之后,并且我不知道该如何解决这个。

awesome-wm
1个回答
0
投票

虽然它无助于澄清我遇到的问题,但这是我为了实现我所想到的目标而想出的解决方法:

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位置,而任何最小化的客户将沿着其余位置形成队列。方便地,产生一个新客户可以使它集中精力,使其成为母版,并将其放在第一位,因此可以保持顺序。

它起作用¯\ _(ツ)_ /¯

© www.soinside.com 2019 - 2024. All rights reserved.