如何配置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)
这是最终结果:

或者,您可以使用带有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窗口放在左侧并为其分配固定空间.
(对话窗口不需要任何规则)