如何在AwesomeWM中切换标题栏?

时间:2017-01-08 16:35:37

标签: function lua window-managers awesome-wm

我试图通过以下方式修改我的rc.lua文件:当我按下Mod4 + R,AwesomeWM键绑定来运行命令时,我希望Rofi出现,模糊我的壁纸并隐藏屏幕上的所有内容。我只想要看到模糊壁纸上的Rofi提示。

为实现这一目标,我的conf文件中包含以下代码。我正在使用AwesomeWM v3.5.9(Mighty Ravendark)和Lua 5.3.3:

--From PROmpt COMmand:
procom = "rofi -show run"

awful.key({ modkey }, "r", function () awful.util.spawn(procom)

    for _,c in ipairs(client.get()) do
        if c:isvisible() then
            mywibox[mouse.screen].visible = not mywibox[mouse.screen].visible 
        else 
            mywibox[mouse.screen].visible = mywibox[mouse.screen].visible 
        end
    end

end),

重新启动AwesomeWM根本不会抱怨,但我的wibox不会消失。如果我将代码更改为一些微不足道的东西(例如if mywibox[mouse.screen],visible作为条件语句),小部件将消失,但即使我退出Rofi,只有返回一个空的黑条将保留在那里再次召唤Rofi时的初始状态(这是由我最初的陈述引起的,这就是我认为是微不足道的原因)。

2 个答案:

答案 0 :(得分:2)

对于新问题:

您的代码段不起作用,因为您检查客户端是否可见,然后切换随机wibox(好吧,不是那么随机)。如果你为每个客户做这件事,wibox会被多次显示和隐藏。因此,你最终会恢复到原来的状态变化约50%,没有wibox变化约50%,也没办法让它恢复原状。

我将扩展我之前答案的最后部分,因为它现在是问题。

你想要什么:

  • 在rofi启动时隐藏wibar(mywibox
  • rofi启动时隐藏所有客户
  • 当rofi存在时恢复wibar
  • 可能会再次显示标签(或不显示标签)。

问题是:

  1. 你不知道rofi何时退出
  2. 你不知道何时出现rofi
  3. 您不知道要隐藏的内容的名称
  4. 您需要隐藏标签和wibar
  5. 问题3:

    不是你的错,3.5没有关于这个的文档,维基也同样令人困惑。

    • awful.wibox(现已更名为wibar)就是屏幕顶部的东西
    • wibox是屏幕上随机自由浮动的小部件。 Wibar是一种像面板一样的wibox。
    • 客户是屏幕上的一个窗口
    • 标记类似于虚拟工作区

    问题2:

    这个很棘手。启动命令时,应用程序出现之间会有一段延迟。有办法检测它,但它们并非无足轻重。现在你可以忽略这个问题。

    问题1:

    这是你真正需要解决的问题。 Awesome 3.5没有良好的API来跟踪从命令到应用程序退出的生命周期。令人敬畏的4.0有点好,但这是一个难以解决的问题。但是,您应该能够知道rofi的class(使用xprop)。一旦你知道这一点,你就可以通过关心"在rofi退出时做一个事件来简化问题"。代码是:

    client.connect_signal("unmanage", function(c)
        if c.class == "whatever_its_class_is" then
            -- watch out of you have multiple screens, this may be too simplified.
            mywibox[mouse.screen].visible = true
    
            -- show the first tag, change this to what you prefer
            awful.tag.gettags(mouse.screen)[1].selected = true
        end
    end)
    

    问题4:

    隐藏当前标记的简单方法(假设您有1个屏幕和1个选定标记,为了简单起见)

    awful.tag.selected().selected = false
    

    隐藏主要wibar(假设您保留默认名称)

    mywibox[mouse.screen].visible = false
    

    原始答案:(问题已更改)

    嗯,c只是一个变量。在这种情况下,您从未定义过它,因此它是nil

    我想你想要所有当前可见的客户端。要检查,请使用client:isvisible()

    您可以使用

    循环遍历所有客户端
    for _, c in ipairs(client.get()) do
        if c:isvisible() then
            -- do something
        end
    end
    

    如客户文档(https://awesomewm.org/apidoc/classes/client.html [1])

    所示

    话虽如此,我不知道描述和问题/代码是如何适合的。如果要隐藏所有内容,请取消选择所有标记并隐藏wibar。与标题栏(客户端上的东西)混淆似乎是不必要的。

    [1]该链接适用于Awesome 4.0,但在这种情况下与3.5 API没有什么不同。

答案 1 :(得分:0)

rc.lua中的整个功能。工作正常,但我计划在未来改进它。但是,完全回答这个问题。

 -- Prompt
    awful.key({ modkey }, "r", 
              function ()
                  myscreen                 = awful.screen.focused()
                  commandPrompter          = "rofi -show run -normal-window"
                  blur                     = "hsetroot -fill /usr/local/share/awesome/themes/modded/back$
                  unblur                   = "hsetroot -fill /usr/local/share/awesome/themes/modded/back$
                  awful.spawn(commandPrompter)
                  myscreen.mywibox.visible = false
                  awful.spawn(blur)
              end),

enter image description here