Lua 如何在不平铺时从窗口动态隐藏边框(Awesome WM)?

Lua 如何在不平铺时从窗口动态隐藏边框(Awesome WM)?,lua,window-managers,awesome-wm,Lua,Window Managers,Awesome Wm,我想从任何没有平铺的窗口中删除边框(无论它在哪里被最大化,或者只是一个指定给标记的窗口),并在平铺后立即添加边框,同时使用相同的布局 我尝试了此解决方案(通过更改客户端。将\u信号添加到客户端。连接\u信号): 但它只适用于一些最大化的窗口,并通过可怕的.rules.rules中的属性重写了我删除的边界(例如,用于synapse启动器) 我在官方的AowesomeAPI文档中看到了平铺(screen)函数,也许可以做些什么?我还是一个新的可怕的西医,所以一点帮助将不胜感激。这是我在我的rc.lu

我想从任何没有平铺的窗口中删除边框(无论它在哪里被最大化,或者只是一个指定给标记的窗口),并在平铺后立即添加边框,同时使用相同的布局

我尝试了此解决方案(通过更改客户端。将\u信号添加到客户端。连接\u信号):

但它只适用于一些最大化的窗口,并通过可怕的.rules.rules中的属性重写了我删除的边界(例如,用于synapse启动器)


我在官方的AowesomeAPI文档中看到了
平铺(screen)
函数,也许可以做些什么?我还是一个新的可怕的西医,所以一点帮助将不胜感激。

这是我在我的rc.lua实现同样的结果:

for s = 1, screen.count() do
    screen[s]:connect_signal("arrange", function ()
        local clients = awful.client.visible(s)
        local layout  = awful.layout.getname(awful.layout.get(s))

        -- No borders with only one visible client or in maximized layout
        if #clients > 1 and layout ~= "max" then
            for _, c in pairs(clients) do -- Floaters always have borders
                if not awful.rules.match(c, {class = "Synapse"}) and awful.client.floating.get(c) or layout == "floating" then                                     
                    c.border_width = beautiful.border_width
                    c.border_color = beautiful.border_focus
                end
            end
        end
    end)
end

我添加了条件
,如果不是很糟糕的话.rules.match(c,{class=“Synapse”}).
来处理您指定的Synapse启动器案例。但是它可能已经被其他条件所覆盖(启动器应该已经是浮动的,因此下一个条件将不允许它获得边框)

对于Aowesome 4.0,标题栏提供了比窗口边框更大的灵活性。 我使用标题栏创建顶部和左侧边框。这样,我就可以在平铺模式下使用边框来区分客户端,但我仍然可以将鼠标移动到屏幕的右边缘或下边缘,然后单击滚动条。这也有助于我判断哪个是重点客户

这是我的
主题.lua
的一部分,我在这里定义了
主题.bar\u width

--{{{{Borders
theme.u间隙=0
theme.border_宽度=0
theme.bar_宽度=2
theme.border_normal=“#3f3f”
theme.border_focus=“#6F6F”
theme.border_marked=“#CC9393”
-- }}}
下面是我的
rc.lua
中的两个部分,我在其中定义了两个标题栏:

client.connect\u信号(“请求::标题栏”,函数(c)
-- ...
--顶栏
--代码是:糟糕。标题栏(c):设置{。。。
--代码变成:
糟透了。标题栏(c{
position=“top”,
bg_normal=beautiful.border_normal,
bg_focus=beautiful.border_focus,
}):设置{
-- ...
}
--左栏
糟透了。标题栏(c{
position=“left”,
尺寸=美观。钢筋宽度,
bg_normal=beautiful.border_normal,
bg_focus=beautiful.border_focus,
})
-- ...
(完)

以下是我的Aowesome 4.2版本:

screen.connect_signal("arrange", function (s)
    local max = s.selected_tag.layout.name == "max"
    local only_one = #s.tiled_clients == 1 -- use tiled_clients so that other floating windows don't affect the count
    -- but iterate over clients instead of tiled_clients as tiled_clients doesn't include maximized windows
    for _, c in pairs(s.clients) do
        if (max or only_one) and not c.floating or c.maximized then
            c.border_width = 0
        else
            c.border_width = beautiful.border_width
        end
    end
end)

我相信它正确地处理了最大化窗口、布局中唯一可见的窗口以及“最大”布局中的窗口。它还应该忽略浮动客户端。

谢谢!值得一提的是,与此相结合,客户端的默认规则应该通过某种方式将边框宽度设置为零。我来自across您的帖子,非常感谢代码对我的系统起到了很大的作用。我也一直在尝试使用动态边框颜色,但在区分聚焦窗口和非聚焦窗口时遇到了一些问题,我想知道您是否有任何想法。特别是您在哪里找到“s.selected_tag.layout.name”在我问问题之前,我已经浏览了文档,并且遇到了这个问题,有一个函数已经完成了我想要的功能,但是它不在文档中,或者文件归档不好,所以你找不到它们。
screen.connect_signal("arrange", function (s)
    local max = s.selected_tag.layout.name == "max"
    local only_one = #s.tiled_clients == 1 -- use tiled_clients so that other floating windows don't affect the count
    -- but iterate over clients instead of tiled_clients as tiled_clients doesn't include maximized windows
    for _, c in pairs(s.clients) do
        if (max or only_one) and not c.floating or c.maximized then
            c.border_width = 0
        else
            c.border_width = beautiful.border_width
        end
    end
end)