2017-07-28 68 views
0

我想向我的Conky添加一个函数,它打印出用于调试目的的字符串长度。该代码,一个名为test.lua文件里面,是非常容易的:如何在Conky中实现一个基本的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浏览,但我无法找到任何东西。有人知道故障在哪里吗?

+0

坦白呼唤你的参数'string',只是一样的普通'string'库不能真的好下场。 –

+0

在这种情况下,它甚至应该可以工作。但是,是的。它的主意不好。 – moteus

+0

更新。看起来更糟。 – xvlaze

回答

0

如何在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. 
    

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

  • 主文件(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