【问题标题】:How to hide borders dynamically from windows when not tiled (Awesome WM)?未平铺时如何从窗口动态隐藏边框(Awesome WM)?
【发布时间】:2015-07-31 04:48:03
【问题描述】:

我想从任何未平铺的窗口中删除边框(无论它在哪里最大化或只是分配给标签的单个窗口)并在平铺后立即添加边框,同时使用相同的布局。

我尝试了这个解决方案(将 client.add_signal 更改为 client.connect_signal):http://blog.lazut.in/2012/11/awesome-wm-remove-border-from-maximized.html

client.connect_signal("focus",
     function(c)
        if c.maximized_horizontal == true and c.maximized_vertical == true then
           c.border_width = "0"
           c.border_color = beautiful.border_focus
        else
           c.border_width = beautiful.border_width
           c.border_color = beautiful.border_focus
        end
     end)

但它只适用于一些最大化的窗口,并覆盖了我通过可怕.rules.rules 中的属性删除的边框(例如,用于突触启动器)。

我在很棒的官方 API 文档中看到了 tiled(screen) 函数,也许可以用它来做点什么?我仍然是 Awesome WM 的新手,因此我们将不胜感激。

【问题讨论】:

    标签: lua window-managers awesome-wm


    【解决方案1】:

    这是我的 Awesome 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)
    

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

    【讨论】:

    • 我看到了你的帖子,非常感谢代码帮助我的系统正常工作,还试图让动态边框颜色也正常工作,但是在区分焦点和无焦点窗口时遇到了一些麻烦,想知道是否你有什么想法。特别是你在哪里找到“s.selected_tag.layout.name”函数我已经通过文档并且在我提出问题之前遇到了这个问题并且有一个函数可以完成我想要的但它不是在文档中或归档不当,因此您找不到它们。
    【解决方案2】:

    这是我在我的 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
    

    我添加了条件if not awful.rules.match(c, {class = "Synapse"})... 来处理您指定的突触启动器案例。但它可能已经被其他条件覆盖(启动器应该已经浮动,因此下一个条件不允许它获得边框)

    【讨论】:

    • 谢谢!值得一提的是,结合这一点,客户端的默认规则应该通过某种方式将border_width设置为零。
    【解决方案3】:

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

    这是我的theme.lua 的一部分,我在其中定义theme.bar_width:

    -- {{{ Borders
    theme.useless_gap   = 0
    theme.border_width  = 0
    theme.bar_width = 2
    theme.border_normal = "#3F3F3F"
    theme.border_focus  = "#6F6F6F"
    theme.border_marked = "#CC9393"
    -- }}}
    

    下面是我的rc.lua 中的两部分,我在其中定义了两个标题栏:

    client.connect_signal("request::titlebars", function(c)
        -- ...
    
        -- The top bar
        -- code was: awful.titlebar(c) : setup { ...
        -- code became:
        awful.titlebar(c, {
            position = "top",
            bg_normal = beautiful.border_normal,
            bg_focus  = beautiful.border_focus,
        }):setup{
            -- ...
        }
    
        -- The left bar
        awful.titlebar(c, {
            position = "left",
            size = beautiful.bar_width,
            bg_normal = beautiful.border_normal,
            bg_focus  = beautiful.border_focus,
        })
    
        -- ...
    end)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多