2017-07-28 69 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