我想在我的Lua配置中使用自定义变量来共享计算机之间的配置。为什么以下内容不起作用,它使用简单的Lua代码:
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}]]
我没有找到任何文档或示例如何使用自定义变量。 $ lan 未解析并打印为 $ {lan}
答案 0 :(得分:2)
如果不使用Conky,我将根据我在阅读wiki上的各种配置部分后所做的一些假设做出回答。
在我看来,conky.text
字段中使用的'variables'和其他模板字段不属于Lua环境。也就是说,$
和${}
语法可能不执行环境查找来插值。此可能也表示您与之比较的nodename
变量实际上是nil
。
无论如何,如果你的lan
变量没有被插值,那么快速修复就是简单地连接你的字符串:
conky.text = [[${color yellow}]] .. lan.. [[ ${alignr}${addr wlp9s0}]]
或者考虑编写自己的字符串iterpolation函数,如果你想要一个看起来更干净的字符串:
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
})
注意,如果nodename
不是Lua环境的一部分,您可以尝试使用io.popen
手动运行hostname
,然后从它返回的文件句柄中读取。