具有静态布局的 AwesomeWM 标签

AwesomeWM tag with static layout

Whosebug 表示为 AwesomeWM 社区支持的地方。

我想在我的 AwesomeWM 配置中有一个专用标签,其中只有三个特定应用程序始终 运行。我设法使用示例配置创建了新标签,并且我设法使用 awful.rules.rules 归档应用程序并将它们放入标签中。

我在理解 AwesomeWM 布局引擎的真正工作原理时遇到了麻烦。我想实现以下:固定宽度的三个静态列,每个应用程序都位于它自己的列中,当焦点发生变化时不会发生重新排列,当任何应用程序不是运行时,它的预留位置保持为空.

___________________
|   |       |     |
|   |       |     |
| A |   B   |  C  |
|   |       |     |
|   |       |     |
___________________

在这种情况下如何指定布局?我应该自己写一个吗?我可以使用灵活的布局并为客户指定位置吗?实现我的目标的推荐正确方法是什么?

I am experiencing troubles in understanding how AwesomeWM layout engine really works

一个布局是一个 table,有两个条目:

  • name 是一个包含布局名称的字符串
  • arrange是一个调用来排列可见客户端的函数

所以你真的只需要编写一个 arrange 函数来按照你想要的方式排列客户端。这个函数的参数是awful.layout.parameters的结果,但是你真的需要关心

  • .clients是需要安排的客户名单
  • .workarea 是可供客户使用的space。
  • .geometries 是您的布局写回分配给客户的几何图形的地方

我建议阅读一些现有的布局,看看它们是如何工作的。例如,max 布局很简单:

function(p)
    for _, c in pairs(p.clients) do
        p.geometries[c] = {
            x = p.workarea.x,
            y = p.workarea.y,
            width = p.workarea.width,
            height = p.workarea.height
        }
    end
end

Should I write my own one? Can I use flexible layout and specify position for client?

嗯,以上就是自己写布局的做法。或者,您也可以让您的客户浮动并通过 awful.rules 为他们分配几何图形。只要有properties = { floating = true, geometry = { x = 42, y = 42, width = 42, height = 42 } }。但是,有了这个,您可以例如不小心动了你的一位客户。

What is the recommended correct way to achieve my goal?

选一个。没有"just one correct answer".