如何在Conky中实现基本的Lua函数?

我正在尝试向我的Conky中添加一个函数,以便于调试目的打印字符串的长度。代码在一个名为test.lua的文件中,内容非常简单:

function test(word)
return string.len(word)
end

......然后我这样加载。在conky.config部分中,我有以下代码:

lua_load = '/home/xvlaze/test.lua',
lua_draw_hook_pre = 'test'

......在conky.text部分中,我有以下代码:

${lua test "fooo"}

......其中test是函数的名称,fooo是要测试的字符串。

预期结果应该是在Conky中打印出4,但是我得到了以下结果:

conky: llua_do_call: function conky_test execution failed: /home/xvlaze/test.lua:2: attempt to index a nil value (local 'string')
conky: llua_getstring: function conky_test didn't return a string, result discarded

我已经浏览了[文档](https://github.com/brndnmtthws/conky/wiki),但是我找不到任何东西。有人知道哪里出了问题吗?

点赞
用户6212808
用户6212808

如何在Conky中实现函数的几点指导:

  • 首先:在函数名之前必须使用conky_。否则,在运行Conky时您将会得到以下错误:

    attempt to call a nil value
    
  • 其次:您必须始终返回一个值。我不介意重复-这非常_关键_。否则,您将会得到:

    function foobar didn't return a string, result discarded
    function_result
    

    …在_您的终端_中,在您的额外代码相关的值为空的情况下。与您的功能相关的任何东西都不会被打印出来。

  • 最后但并非最不重要的:您必须始终按以下方式调用您的函数:

    lua_load = '/path/to/function.lua',
    -- 无论内容如何...
    ${lua function_name function_parameter1 function_parameterN} -- 如果您使用超过一个参数。
    

总之,一个虚拟函数模板如下:

  • 主要文件(conky.conf):

    conky.config = {
        -- 无论内容如何... Lua风格的注释。
        lua_load = '/path/to/function.lua',
    }
    
    conky.text = [[
        # 无论内容如何... 在此部分,注释以 '#' 开头!
        ${lua function_name parameter}
    ]]
    
  • 函数文件:

    function conky_function_name(parameter)
        -- 不管内容如何……请记住,这是Lua,而不是conky.text语法。始终使用'--'注释!
        return whatever -- 没有返回值,没有派对。函数必须始终返回某些东西!
    end
    
2017-08-16 09:53:43