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

时间:2017-07-28 09:14:24

标签: function debugging lua customization conky

我正在尝试向我的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

我浏览了documentation,但我找不到任何东西。有人知道失败的地方吗?

1 个答案:

答案 0 :(得分:2)

关于如何在Conky中实现功能的一些指导:

  • 首先:你必须在你的功能名称之前使用conky_。 否则,运行Conky时会出现以下错误:

    attempt to call a nil value
    
  • 其次:你必须总是回报价值。 我不介意重复它 - 它是至关重要的。否则,你会得到:

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

    ... 在您的终端中,您的Conky将留空与您的额外代码相关的值。关于您的功能,不会打印任何内容。

  • 最后但同样重要的是:你必须总是打电话给你:

    lua_load = '/path/to/function.lua',
    -- Whatever content...
    ${lua function_name function_parameter1 function_parameterN} -- In case you use more than one parameter.
    

总之,虚拟函数模板可以是:

  • MAIN FILE(conky.conf):

    conky.config = {
        -- Whatever content... Lua styled comments.
        lua_load = '/path/to/function.lua',
    }
    
    conky.text = [[
        # Whatever content... In this section comments are started with '#'!    
        ${lua function_name parameter}
    ]]
    
  • 功能文件:

    function conky_function_name(parameter)
        -- Whatever content... Remember this is Lua, not conky.text syntax. Always use '--' comments!
        return whatever -- No return, no party. A function MUST always return something!
    end