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

What is the Lua "replacement" for the pre_exec command in Conky files?

我不擅长编程,但我尝试 fiddle 使用我喜欢的 conky_rc 文件,我发现它看起来很漂亮 straight-forward。

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

不幸的是,除了 https://github.com/brndnmtthws/conky/issues/62. The thread https://github.com/brndnmtthws/conky/issues/146 引用它之外,我似乎找不到与此直接相关的任何内容,它的 "solution" 声明:基本上,没有替代品,你应该使用 Lua 或使用非常大的间隔并执行。

我又发现了几个线程,它们都包含关于为什么停止使用此功能的问题,但没有实际答案。所以,重申一下,我完全不知道 Lua(我以前听说过,现在我添加了几个网站明天要看,因为我花了大部分时间试图弄清楚出这个 Conky 的东西),我可能会放弃并执行 execi 选项(我的电脑可以处理它,但我只是认为它非常低效)。

有合适的Lua选项吗?如果是这样,有人可以指导我查看手册或 wiki,或者解释一下吗?或者 "proper" Lua 解决方案是这样的吗?

@Vincent-C It's not working for your script is because the function ain't getting call. from the quick few tests I did, it seem lua_startup_hook need the function to be in another file that is loaded using lua_load, not really sure how the hook function thingy all works cause I rather just directly use the config as lua since it is lua.

Basically just call the io.popen stuff and concat it into conky.text

conky.text = [[ a lot of stuff... ${color green} ]];

o = io.popen('fortune -s | cowsay', 'r') conky.text = conky.text ..
o:read('*a')

您引用的第一页上的 comment by 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 函数将 return 包含传递给它的命令输出的字符串。从 [[]] 的 conky.text 部分也是一个字符串,因此可以使用 [=19] 将其连接到 pre_exec 编辑的字符串 return =]运算符,如asl97提供的用法部分所示。

在我的测试中,我做了以下愚蠢的事情,它按预期工作,显示 "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 --
]]