Conky-Lua Config-Custom变量

Conky-Lua Config-Custom变量,lua,conky,Lua,Conky,我想在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

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

如果不使用Conky,我将根据我在阅读上的各种配置部分后所做的一些假设来回答

在我看来,在
conky.text
字段中使用的模板和其他模板字段不是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环境的一部分,您可以尝试使用手动运行,然后从它返回的文件句柄中读取。

不使用Conky,我将根据在阅读了在

在我看来,在
conky.text
字段中使用的模板和其他模板字段不是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环境的一部分,您可以尝试使用手动运行,然后读取它返回的文件句柄。

我编辑了这个问题,指出了“不工作”的意思我对Conky来说是新的,但它不应该是
Conky.text=[${color yellow}${lan}${aligner}${addr wlp9s0}]
,在
lan
周围增加
{}
?不,{}只在涉及参数时才需要,更不用说它有相同的效果,有括号和没有括号。我编辑了这个问题,指出了“不工作”的意思我对Conky来说是新的,但它不应该是
Conky.text=[${color yellow}${lan}${aligner}${addr wlp9s0}]
,在
lan
周围有额外的
{}
?没有{}仅当涉及参数时才需要,更不用说它有相同的效果,有括号和没有括号。是的,插值提示起了作用。我是LUA的新手,可能这是对我自己的一个基本误解。谢谢。为了完成您的回答,第一个节点名是Conky的一部分,并解析为正确的值。连接字符串在conky内部,文本由于一些未知的原因而不起作用。对我起作用的是什么。我将我的“if”语句放在“conkyrc”的顶部,定义一个模板“template0=[[${color yellow}]]…lan..[${aligner}${addr wlp9s0}]],并在conky.text中使用它。下一个问题是将“${addr wlp9s0}”作为${addr$lan}解决不起作用。@JensPeters是
nodename
一个实际的变量,因为它是由Lua环境提供的-或者它只是一个Conky“变量”,因为它可以通过模板字符串解析?而且,
$lan
也不起作用,因为Conky不会在Lua中搜索变量。你可以这样做
'${addr'..lan..'}“
,或其他连接解决方案。我可以稍微更新我的问题,让您更清楚地了解环境。是的,插值提示起了作用。我是LUA的新手,可能这是对我自己的一个根本性误解。谢谢。为了完成您的回答,第一个节点名是Conky的一部分,并解析为正确的value.在conky中连接字符串,文本由于未知原因不起作用。对我来说,什么起作用了。我将我的“if”语句放在“conkyrc”的顶部,定义一个模板“template0=[[${color yellow}]]…lan..[${aligner}${addr wlp9s0}]]”,并在conky.text中使用它。下一个问题是将“${addr wlp9s0}”作为${addr$lan不起作用。@JensPeters是
nodename
一个实际的变量,因为它是由Lua环境提供的-或者它只是一个Conky“变量”,因为它可以通过模板字符串解析?而且,
$lan
也不起作用,因为Conky不会在Lua中搜索变量。你可以这样做
'${addr'..lan..}'
,或其他一些连接解决方案。我可以稍后更新我的问题,让您更清楚地了解环境。