2017-07-28 4 views
0

J'essaie d'ajouter une fonction à mon Conky qui imprime la longueur d'une chaîne à des fins de débogage. Le code, dans un fichier appelé test.lua, est assez trivial:Comment implémenter une fonction Lua basique dans Conky?

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

... et je le charger comme ça. Dans ma section conky.config je:

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

... dans la section conky.text je:

${lua test "fooo"} 

... où test est le nom de la fonction et fooo la chaîne à tester.

Le résultat attendu devrait être imprimé 4 Conky, mais au lieu de que je reçois:

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 

J'ai parcouru tout le documentation, mais je ne trouve rien. Est-ce que quelqu'un sait où est l'échec?

+0

Franchement appeler votre paramètre 'string', la même chose que la bibliothèque régulière' string' ne peut pas finir très bien. –

+0

Dans ce cas, il devrait même fonctionner. Mais oui. Sa mauvaise idée. – moteus

+0

Mis à jour. Ça a l'air pire. – xvlaze

Répondre

0

Plusieurs guidances sur la façon de mettre en œuvre des fonctions Conky:

  • d'abord: vous devez utiliser conky_ AVANT LE NOM DE VOTRE FONCTION. Sinon, vous obtiendrez l'erreur suivante lors de l'exécution de votre Conky:

    attempt to call a nil value 
    
  • Deuxièmement: vous devez toujours retourner une valeur. Cela ne me dérange pas de le répéter - c'est crucial. Dans le cas contraire, vous obtiendrez:

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

    ... dans votre terminal, et votre Conky sera laissé vide des valeurs liées à votre code supplémentaire. Rien ne sera imprimé concernant votre fonction.

  • Last but not least: VOUS DEVEZ TOUJOURS APPELEZ VOTRE FONCTION COMME:

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

En résumé, un modèle de fonction fictive pourrait être:

  • fichier principal (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} 
    ]] 
    
  • FICHIER FONCTION:

    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