Conky - Lua Config - 自定义变量

我想在我的conky的Lua配置中使用自定义变量来在不同的电脑之间共享配置。为什么下面的代码不行,它使用了简单的Lua代码:

conky.config={..}

-- 设置变量
work = "COMPUTERNAME"
lan  = "wlp9s0"
-- 与当前主机名进行比较(conky的全局变量)
if work == nodename then
  lan = "enp3s0"
end

-- 在conky的文本中使用 $lan 变量
conky.text = [[${color yellow}$lan ${alignr}${addr wlp9s0}]]

我没有找到任何关于如何使用自定义定义变量的文档或示例。** $lan 没有被解析并打印为 $ {lan} **

点赞
用户2505965
用户2505965

不使用 Conky,我将基于阅读Wiki中的各个配置部分后做出一些假设来回答这个问题。

在我的理解中,conky.text 领域和其他模板领域中使用的“变量”(variables)可能并不是 Lua 环境的一部分。也就是说,$${} 语法很可能不执行环境查找以插值。这还可能意味着您比较的 nodename 变量实际上是 nil

无论如何,如果您的 lan 变量未被插值,快速修复方法是简单地连接您的字符串:

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

或者考虑编写自己的字符串迭代函数,如果您想要一个更干净的字符串:

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,然后从它返回的文件处理中读取。

2016-11-03 15:14:25