Conky 文件中 pre_exec 命令的 Lua "replacement"是什么?



我不擅长编程,但我试图摆弄一个我喜欢的conky_rc文件,我发现它看起来很简单。

正如标题所述,我现在了解到,pre_exec以前的命令早已被Lua删除并取代。

不幸的是,除了 https://github.com/brndnmtthws/conky/issues/62 之外,我似乎找不到与此直接相关的东西。线程 https://github.com/brndnmtthws/conky/issues/146 引用它,其"解决方案"声明:基本上,没有替代品,您应该使用 Lua 或使用非常大的间隔和执行。

我发现了更多线程,它们都包含有关为什么停止此功能的问题,但没有实际答案。所以,重申一下我的,我对 Lua 完全一无所知(我以前听说过它,现在我添加了一些网站供明天查看,因为我花了大部分时间试图弄清楚这个 Conky 的事情(,我可能会放弃并做 execi 选项(我的电脑可以处理它,但是, 我只是认为它效率低得可怕(。

是否有合适的 Lua 选项?如果是这样,有人会引导我到手册或维基,或者解释一下吗?还是"适当的"Lua解决方案?

@Vincent-C 它不适用于您的脚本是因为该函数 没有接到电话。从我做的快速测试来看,似乎 lua_startup_hook需要该函数位于另一个文件中 使用lua_load加载,不太确定钩子的功能如何 所有工作都是因为我宁愿直接将配置用作lua,因为它 是路亚。

基本上只需调用io.popen的东西并将其连接到conky.text中即可。

conky.text = [[ a lot of stuff... ${color green} ]];
o = io.popen('fortune -s | cowsay', 'r') conky.text = conky.text ..
o:read('*a')

asl97 在您引用的第一页上的评论似乎提供了一个答案,但一些解释可能会有所帮助。

asl97 提供了以下通用的 Lua 函数作为$pre_exec的替代品,前面有一个require语句,使io可供该函数使用:

require 'io'
function pre_exec(cmd)
local handle = io.popen(cmd)
local output = handle:read("*a")
handle:close()
return output
end

将此代码块添加到您的 conky 配置文件将使该函数可用于其中。为了进行测试,我将其添加到conky.config = { ... }部分上方。

调用 Lua pre_exec 函数将返回一个字符串,其中包含传递给它的命令的输出。从[[]]的 conky.text 部分也是一个字符串,因此可以使用..运算符将其激活为 pre_exec 返回的字符串,如 asl97 提供的用法部分所示。

在我的测试中,我做了以下愚蠢的事情,它按预期工作,在我的conky显示器顶部显示"Hello World!"和date函数的输出,每个函数的间距上下都有:

conky.text = pre_exec("echo; echo Hello World!; echo; date; echo")..[[
-- lots of boring conky stuff --
]]

当然,更严肃的命令可以与pre_exec一起使用,如asl97所示。

asl97 没有解释的一件事是如何提供如何连接,以便pre_exec输出位于 conky 显示的中间,而不仅仅是开头。我测试并发现您可以像下面这样做:

conky.text = [[
-- some conky stuff --
]]..pre_exec("your_important_command")..[[
-- more conky stuff --
]]

最新更新