2016-11-02 4 views
0

Je veux utiliser des variables personnalisées dans ma config Lua de conky pour partager la config entre les ordinateurs. Pourquoi ce qui suit ne fonctionne pas, il utilise simplement le code Lua:Conky - Lua Config - Variables personnalisées

conky.config={..} 

-- set variables 
work = "COMPUTERNAME" 
lan = "wlp9s0" 
-- compare with current host name (conky's global variable) 
if work == nodename then 
    lan = "enp3s0" 
end 

-- use $lan in conky's text 
conky.text = [[${color yellow}$lan ${alignr}${addr wlp9s0}]] 

Je ne trouve pas de documentation ou par exemple comment utiliser des variables personnalisées. $ lan n'est pas résolu et imprimé $ {lan}

+0

J'ai édité la question, a souligné ce que "ne fonctionne pas" signifie –

+0

Je suis nouveau à Conky, mais ne devrait-il pas être 'conky.text = [[$ {couleur jaune} $ {lan} $ {alignr} $ {addr wlp9s0}]] ', avec un' {} 'additionnel autour de' lan'? –

+0

Non, le {} n'est nécessaire que lorsque des paramètres sont impliqués, et moins il a le même effet, avec et sans parenthèse. –

Répondre

1

Sans utiliser Conky, je vais faire une réponse basée sur certaines hypothèses que j'ai fait après avoir lu les différentes sections de configuration figurant sur la wiki .

Il me semble que le 'variables' utilise dans le champ conky.text, et d'autres champs de modèle, ne font pas partie de l'environnement Lua. C'est-à-dire que la syntaxe $ et ${} n'effectue probablement pas de recherches d'environnement pour interpoler des valeurs. Ce pourrait également signifier également que la variable nodename que vous comparez est réellement nil.

En tout état de cause, si votre variable lan n'est pas interpolé, la solution rapide est de concaténer simplement vos cordes:

conky.text = [[${color yellow}]] .. lan.. [[ ${alignr}${addr wlp9s0}]] 

Ou envisager d'écrire votre propre fonction iterpolation chaîne, si vous voulez une chaîne recherche plus propre :

local function interp (s, t) 
    return s:gsub('(#%b{})', function (w) 
     return t[w:sub(3, -2)] or w 
    end) 
end 

conky.text = interp([[${color yellow}#{lan} ${alignr}${addr wlp9s0}]], { 
    lan = lan 
}) 

Remarque, dans le cas où nodename ne fait pas partie de l'environnement Lua, vous pouvez essayer d'utiliser io.popen pour exécuter hostname manuellement, puis lire à partir de la poignée de fichier qu'il renvoie.

+0

Oui, l'indice d'interpolation a fait l'affaire. Je suis nouveau à LUA peut-être que c'était un malentendu fondamental de moi-même. Je vous remercie. Pour compléter votre réponse, le premier nom de noeud fait partie de Conky et est résolu à la valeur correcte. La concaténation des chaînes à l'intérieur de conky, le texte n'a pas fonctionné pour une raison inconnue. Ce qui a fonctionné pour moi Je mets mon "if" déclaration en haut de "conkyrc", définir un modèle "template0 = [[$ {couleur jaune}]] .. lan .. [[$ {alignr} $ {addr wlp9s0}]]" et utiliser dans conky.text. Le prochain problème est de résoudre "$ {addr wlp9s0}", car $ {addr $ lan} ne fonctionne pas. –

+0

@JensPeters Est-ce que nodename est une variable réelle, en ce sens qu'elle est fournie par l'environnement Lua - ou est-ce simplement une variable Conky, en ce sens qu'elle peut être résolue par une chaîne de template? Et encore, "$ lan" ne fonctionnera pas parce que Conky ne recherche pas votre Lua [environnement] (http://www.lua.org/manual/5.3/manual.html#2.2) pour les variables. Vous pouvez faire '' $ {addr '.. lan ..'} '', ou une autre solution de concaténation. Je peux mettre à jour ma question un peu pour vous donner une meilleure compréhension des environnements. – Oka