如何调试从 conky 中调用的 lua 函数?

我正在尝试向我的现有 conky 设置中添加一些 lua 功能,以便可以清理我的 conky 文本中的重复“代码”。例如,我有每个已挂载的 FS、每个内核等的信息,在我的面板中显示的每一行仅仅因某个参数而不同。

我第一次尝试使用 lua 函数进行这项工作,似乎可以运行,但在我的面板中没有显示任何内容。我只发现了一些非常简单的例子来进行操作,因此我可能已经犯了一个简单的错误,但我甚至不知道如何诊断它。我在这里的代码是基于我所能找到的编写函数的非常简单的示例,例如这个 如何在 Conky 中实现基本的 Lua 函数?,但这就是我在该主题中发现的全部深度,除了绘图和 cairo 示例之外。

这是我添加到我的 conky 配置文件中的代码,以及我的 functions.lua 文件的内容

conky.config = {
...
    lua_load = '/home/conky-manager/MyConky/functions.lua',

};

conky.text = [[
...
${voffset 5}${lua conky_test 'test'}
...
]]

文件 - functions.lua

function conky_test(parm1)
    return 'result text'
end

我期望看到的是“result text”在我的面板中的位置上显示,但什么也没有显示出来。

Conky 是否在运行时创建了日志,或者是否有一种方法来提供一些调试输出?即使我在这里犯了一个简单的错误,我仍然希望能够诊断事物,因为我的代码变得更加复杂。

点赞
用户4488735
用户4488735

成功了!

在阅读了几篇文章后,我找到了自己的基本问题 -

  1. 缺少'conky_main'函数,
  2. 缺少'lua_draw_hook_post'来调用它,以及
  3. 意识到如果我在终端中调用conky,则lua中的print语句会出现在那里。

因此,对于任何看到这个问题并有相同问题的人,这是已纠正的代码。

conky.config = {
...
    lua_load = '/home/conky-manager/MyConky/functions.lua',
    lua_draw_hook_post = "main",

};

conky.text = [[
...
${lua conky_test 'test'}
...
]]

以及我的functions.lua文件中适当的基础知识

function conky_test(parm1)
    return 'result text'
end

function conky_main()
    if conky_window == nil then
        return
    end
end

一些注意事项:

  1. 我仍然没有确定使用'lua_draw_hook_pre'代替'lua_draw_hook_post'是否有任何区别,但在这个示例中似乎没有区别。
  2. 此外,一些示例实际上显示调用了'test'函数而不是编写'main',但'main'似乎具有检查conky_window是否存在的价值。
  3. 一些示例似乎声明使用前缀'conky_'命名函数是必需的,但是后来显示调用这些函数而不使用前缀,因此我认为该前缀在调用期间是隐含的。
2019-01-15 02:32:46
用户1450409
用户1450409

重要提示: 你应该从包含 Lua 脚本的目录中运行 Conky。

2021-03-08 15:57:02