在awesome-wm中为特定应用程序设置窗口布局

kle*_*lew 15 lua awesome-wm

如何配置awesome所以它将启动新的应用程序与两个窗口对齐如下:

----------------
|xxxxxxxxxx####|
|xxxxxxxxxx####|
|xxxxxxxxxx####|
|xxxxxxxxxx####|
----------------
Run Code Online (Sandbox Code Playgroud)

其中"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
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

Jud*_*den 12

我有同样的问题,但我想在左边有一个大的Firefox窗口,右边有一个小终端.为了使其工作,我专门为此目的使用标签左侧布局并调整宽度系数(即通常由CTRL-L执行的操作).

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

awful.tag.viewonly(yourtag)
awful.tag.incmwfact(0.15, yourtage)
Run Code Online (Sandbox Code Playgroud)

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

{
    rule = { class = "URxvt" },
    callback = awful.client.setslave
},
Run Code Online (Sandbox Code Playgroud)

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

{
    rule = { class = "Firefox" },
    properties = { tag = browse }
},
{
    rule = { class = "URxvt", instance = "browse" },
    properties = { tag = browse },
},
Run Code Online (Sandbox Code Playgroud)

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

-- 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)
Run Code Online (Sandbox Code Playgroud)

这是最终结果:

这是最终结果.


col*_*fix 5

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

查看:http://www.bramschoenmakers.nl/en/node/738

虽然他的实现对我的版本很棒有点儿麻烦.问题是它不能调整已经设置的struts.

我的实施:

{ 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 },
Run Code Online (Sandbox Code Playgroud)

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

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