【问题标题】:What is the Lua "replacement" for the pre_exec command in Conky files?Conky 文件中 pre_exec 命令的 Lua“替换”是什么?
【发布时间】:2020-03-03 20:28:25
【问题描述】:

我不擅长编程,但我试图摆弄一个我喜欢的 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,因为它 是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')

【问题讨论】:

    标签: linux lua conky


    【解决方案1】:

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

    在我的测试中,我做了以下傻事,它按预期工作,显示“Hello World!”以及 date 函数的输出,在我的 conky 显示屏顶部的上方和下方都有间距:

    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 --
    ]]
    

    【讨论】:

    • 非常感谢大家一起写这篇文章!你知道如何在每次pre_exec 调用后避免换行吗?
    • 啊,对不起,我刚刚意识到我需要在我的cat 命令末尾执行| tr '\n' ' ' 来删除换行符(所以这不是pre_exec 的问题)
    猜你喜欢
    • 2016-08-13
    • 1970-01-01
    • 2020-08-24
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2020-12-25
    • 2021-07-26
    相关资源
    最近更新 更多