微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从awful.spawn.easy_async添加小部件吗?

如何解决从awful.spawn.easy_async添加小部件吗?

我想添加一个电源状态小部件,但前提是系统支持它(我在台式机上运行与笔记本电脑相同的配置)。显然,我可以检查主机名,但是我只想检查acpi是否可用。目前我有这个:

mybattery = nil    
awful.spawn.easy_async("acpi",function(stdout,stderr,reason,exit_code)
                               if string.find(stdout,"^Battery") then
                                   mybattery = batteryarc_widget{
                                       show_current_level = true,arc_thickness = 1
                                   }
                               end
                           end
    )

然后将mybattery添加为小部件。这失败了,大概是因为以后更新mybattery不会更新wibar。事实结束后如何添加小部件?还是有更好的方法来做到这一点?我宁愿不同步致电acpi

后续行动: 由于此小部件在无法找到电池时会定期轮询acpi并弹出警告,因此我根本不想创建该小部件,除非它可以工作。因此,我接受了伊曼纽尔的其他建议。 vert_sep只是一个分隔小部件,mybattery随后会在配置中添加到wibar中。

mybattery = wiBox.container.background()
awful.spawn.easy_async("acpi",exit_code)
                           if string.find(stdout,"^Battery") then
                               local batteryarc_widget =
                                   require("awesome-wm-widgets.batteryarc-widget.batteryarc")
                               local w = wiBox.layout.fixed.horizontal()
                               w:add(batteryarc_widget{
                                         show_current_level = true,arc_thickness = 1})
                               w:add(vert_sep)
                               mybattery.widget = w
                           end
                       end
)

解决方法

有多种方法。您可以使用布局:add():insert()方法[1]。即使不使用它,也可以创建它。使用visible = falseforced_width = 0来确保它不显示。这具有微观的性能损失,但是比使用命令式布局方法更简单。第三种方法是添加一个占位符容器并在以后设置其.widget。但是在那时,visible技巧似乎更简单。

[1] https://awesomewm.org/apidoc/widget_layouts/wibox.layout.fixed.html#insert

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。