17

如何配置真棒,以便启动新的应用程序,两个窗口对齐,如下所示:

----------------
|xxxxxxxxxx####|
|xxxxxxxxxx####|
|xxxxxxxxxx####|
|xxxxxxxxxx####|
----------------

例如,其中“x”是 pidgin 中的对话窗口,“#”是好友列表窗口。

一般来说,我想指定右侧窗口的宽度并将其放在右侧(垂直最大化),另一个窗口应该占用剩余空间。

我已经有一些几乎可以工作的代码,但它的行为很奇怪(它为 pidgin 设置了所有正确的东西,但它不适用于 gimp 和 v_sim,并且有时在我不知道的情况下它会改变左窗口的几何形状。或者当我启动应用程序(v_sim)它没有放置在正确的位置并且它没有垂直最大化,但是当我重新启动awesome时,它会正确放置它。所以我猜这个应用程序在启动时会改变一些东西。

这是我现在使用的代码:

awful.rules.rules = {
  ...
  { rule = { class = "Pidgin", role = "buddy_list" },
    properties = {
      floating = true
    },
    callback = function( c )
      local w_area = screen[ c.screen ].workarea
      local winwidth = 340
      c:struts( { right = winwidth } )
      c:geometry( { x = w_area.width - winwidth, width = winwidth, y = w_area.y, height = w_area.height } )
    end
  },
  { rule = { class = "Pidgin", role = "conversation" },
    properties = {
      floating = true,
      x = 0,
      maximized_vertical = true,
      maximized_horizontal = true
    },
    callback = awful.client.setslave
  },
  ...
}
4

2 回答 2

12

我遇到了同样的问题,但我想要左边有一个大的 Firefox 窗口,右边有一个小终端。为了让它工作,我为此专门使用了一个标签,并使用了一个 tile-left 布局并调整了宽度因子(即通常由 CTRL-L 执行的操作)。

将以下内容添加到 rc.lua 的末尾,其中 yourtag 是您希望放置这些窗口的标签。0.15 值可以根据您的喜好进行调整。

awful.tag.viewonly(yourtag)
awful.tag.incmwfact(0.15, yourtage)

此外,使用awful.client.setslave右侧所需的窗口可确保它们不会被切换。

{
    rule = { class = "URxvt" },
    callback = awful.client.setslave
},

您还可以使用该tag属性将某些应用程序定向到标签。

{
    rule = { class = "Firefox" },
    properties = { tag = browse }
},
{
    rule = { class = "URxvt", instance = "browse" },
    properties = { tag = browse },
},

然后我创建了一个绑定来打开这些应用程序,如下所示。

-- Custom programs
awful.key({ modkey, "Shift" }, "b", function()
    awful.tag.viewonly(browse)
    awful.util.spawn_with_shell("urxvt -name browse -e newsbeuter")
    awful.util.spawn("firefox")
end)

这是最终结果:

这是最终的结果。

于 2011-02-28T06:44:49.250 回答
5

或者,您可以使用带有 struts 的浮动联系人列表窗口。这可以防止在不存在消息窗口时最大化联系人列表窗口。此外,它允许将 CL 窗口放置在任意(平铺)窗口旁边。

退房:http ://www.bramschoenmakers.nl/en/node/738

虽然他的实现对于我的 awesome 版本来说有点问题。问题是它不会针对已经设置的支柱进行调整。

我的实现:

{ rule = { class = "Pidgin", role = "buddy_list" },
    properties = {floating=true,
                  maximized_vertical=true, maximized_horizontal=false },
    callback = function (c)
        local cl_width = 250    -- width of buddy list window

        local scr_area = screen[c.screen].workarea
        local cl_strut = c:struts()

        -- scr_area is affected by this client's struts, so we have to adjust for that
        if c:isvisible() and cl_strut ~= nil and cl_strut.left > 0 then
            c:geometry({x=scr_area.x-cl_strut.left, y=scr_area.y, width=cl_strut.left})
        -- scr_area is unaffected, so we can use the naive coordinates
        else
            c:struts({left=cl_width, right=0})
            c:geometry({x=scr_area.x, y=scr_area.y, width=cl_width})
        end
    end },

这会将 CL 窗口放在左侧并为其分配固定空间。

(对话窗口不需要任何规则)

于 2012-05-29T09:47:02.513 回答