1

我想在我的 conky 的 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}

4

1 回答 1

4

在不使用 Conky 的情况下,我将根据我在阅读wiki上的各种配置部分后所做的一些假设来做出回答。

在我看来,在字段中使用的“变量”conky.text和其他模板字段不是 Lua 环境的一部分。也就是说,$and${}语法可能不会执行环境查找来插入值。这也可能意味着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-03T15:14:25.397 回答