如何切换 AwesomeWM 中的标题栏?
How to toggle the titlebar in AwesomeWM?
我正在尝试按以下方式修改我的 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,一个空的黑条仍将留在那里,只有再次召唤罗菲时才会回到初始状态(这是我最初的说法造成的,所以我认为是微不足道的)。
对于新问题:
您的代码片段不起作用,因为您检查客户端是否可见,然后切换随机 wibox(好吧,不是那么随机)。 wibox 将多次显示和隐藏,您是否为每个客户执行此操作。所以你最终有 ~50% 的变化回到原始状态,~50% 的变化没有 wibox 并且没有办法恢复它。
我将扩展我之前回答的最后一部分,因为它现在是问题。
你想要什么:
- rofi 启动时隐藏 wibar (
mywibox
)
- rofi 启动时隐藏所有客户端
- rofi存在时恢复wibar
- 也许再次显示标签(或不显示,由您决定)。
问题是:
- 你不知道rofi什么时候退出
- 你不知道rofi什么时候出现
- 您不知道要隐藏的东西的名称
- 您需要隐藏标签和wibar
问题三:
不是你的错,3.5 没有这方面的文档,wiki 同样令人困惑。
awful.wibox
(现在更名为 wibar)是屏幕顶部的东西
- 一个
wibox
是屏幕上随机自由浮动的小部件。 wibar 是一种类似于面板的 wibox。
- 一个客户在屏幕上是window
- 标签类似于虚拟工作区
问题二:
这个很棘手。当您启动命令时,在该命令与应用程序出现之间存在延迟。有多种方法可以检测到它,但它们并非微不足道。现在你可以忽略这个问题。
问题一:
这是您真正需要解决的问题。 Awesome 3.5 没有很好的 API 来跟踪从命令到应用程序退出的生命周期。 Awesome 4.0 稍微好一点,但这是一个很难解决的问题。不过,rofi的class
(using xprop
)大家应该都知道吧。一旦你知道了这一点,你就可以通过只关心 "do an event when rofi exits" 来简化问题。代码是:
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)
问题四:
隐藏当前标签的简单方法(为简单起见,假设您有 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])
话虽这么说,但我不明白描述和 question/code 是如何吻合的。如果您想隐藏所有内容,请取消选择所有标签并隐藏 wibar。弄乱标题栏(客户端顶部的东西)似乎是不必要的。
[1] link 适用于 Awesome 4.0,但在这种情况下与 3.5 没有太大区别 API。
现在我的 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),
我正在尝试按以下方式修改我的 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,一个空的黑条仍将留在那里,只有再次召唤罗菲时才会回到初始状态(这是我最初的说法造成的,所以我认为是微不足道的)。
对于新问题:
您的代码片段不起作用,因为您检查客户端是否可见,然后切换随机 wibox(好吧,不是那么随机)。 wibox 将多次显示和隐藏,您是否为每个客户执行此操作。所以你最终有 ~50% 的变化回到原始状态,~50% 的变化没有 wibox 并且没有办法恢复它。
我将扩展我之前回答的最后一部分,因为它现在是问题。
你想要什么:
- rofi 启动时隐藏 wibar (
mywibox
) - rofi 启动时隐藏所有客户端
- rofi存在时恢复wibar
- 也许再次显示标签(或不显示,由您决定)。
问题是:
- 你不知道rofi什么时候退出
- 你不知道rofi什么时候出现
- 您不知道要隐藏的东西的名称
- 您需要隐藏标签和wibar
问题三:
不是你的错,3.5 没有这方面的文档,wiki 同样令人困惑。
awful.wibox
(现在更名为 wibar)是屏幕顶部的东西- 一个
wibox
是屏幕上随机自由浮动的小部件。 wibar 是一种类似于面板的 wibox。 - 一个客户在屏幕上是window
- 标签类似于虚拟工作区
问题二:
这个很棘手。当您启动命令时,在该命令与应用程序出现之间存在延迟。有多种方法可以检测到它,但它们并非微不足道。现在你可以忽略这个问题。
问题一:
这是您真正需要解决的问题。 Awesome 3.5 没有很好的 API 来跟踪从命令到应用程序退出的生命周期。 Awesome 4.0 稍微好一点,但这是一个很难解决的问题。不过,rofi的class
(using xprop
)大家应该都知道吧。一旦你知道了这一点,你就可以通过只关心 "do an event when rofi exits" 来简化问题。代码是:
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)
问题四:
隐藏当前标签的简单方法(为简单起见,假设您有 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])
话虽这么说,但我不明白描述和 question/code 是如何吻合的。如果您想隐藏所有内容,请取消选择所有标签并隐藏 wibar。弄乱标题栏(客户端顶部的东西)似乎是不必要的。
[1] link 适用于 Awesome 4.0,但在这种情况下与 3.5 没有太大区别 API。
现在我的 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),