lua 代码的奇怪行为(AwesomeWM 配置)
Strange behaviour of lua code (AwesomeWM config)
在我的 rc.lua(AwesomeWM 的配置文件)中使用这段代码,我得到了您在下图中看到的内容:
mybattmon = wibox.widget.textbox()
function battery_status ()
local output={}
local fd=io.popen("acpi", "r")
local line=fd:read()
while line do
local battery_load = string.match(line, "(%d*)%%")
local discharging
if string.match(line, "Discharging")=="Discharging"
then
discharging="-"
elseif string.match(line, "Charging")=="Charging"
then
discharging="⚡"
else
discharging=""
end
-- if tonumber(battery_load) < 10 then fontColor="red" else fontColor="black" end
-- table.insert(output,"<span color='" ..fontColor.. "'>")
table.insert(output,discharging.. "" ..battery_load.. "%")
-- table.insert(output,"</span>")
line=fd:read() --read next line
end
return table.concat(output,"|")
end
my_battmon_timer = timer({ timeout = 2 })
my_battmon_timer:connect_signal("timeout", function()
mybattmon:set_markup( '<span background="#92B0A0" font="' .. font .. '"color="#000">BAT: ' .. battery_status() .. '</span>' )
end)
my_battmon_timer:start()
如果我取消注释三个注释行(这意味着当电池电量下降到低于 10% 时改变颜色),我得到以下信息:
当我放入第二块电池时,垂直条在那里分隔。
有人明白为什么改变颜色的三行会使其在文本前后插入条形吗?
当 table 有多个元素时,您正在插入管道。
您的原始代码实际上是这样的(对于单电池盒):
local output={}
table.insert(output, "a")
print(table.concat(output, "|"))
# a
您未注释的代码版本实际上是这样的:
local output={}
table.insert(output, "pre-a")
table.insert(output, "a")
table.insert(output, "post-a")
print(table.concat(output, "|"))
# pre-a|a|post-a
您想将跨度字符串格式化为 table 中的一个条目。
if tonumber(battery_load) < 10 then fontColor="red" else fontColor="black" end
local batstr = "<span color='" ..fontColor.. "'>"
batstr = batstr..discharging.. "" ..battery_load.. "%"
batstr = batstr.."</span>"
table.insert(output,batstr)
在我的 rc.lua(AwesomeWM 的配置文件)中使用这段代码,我得到了您在下图中看到的内容:
mybattmon = wibox.widget.textbox()
function battery_status ()
local output={}
local fd=io.popen("acpi", "r")
local line=fd:read()
while line do
local battery_load = string.match(line, "(%d*)%%")
local discharging
if string.match(line, "Discharging")=="Discharging"
then
discharging="-"
elseif string.match(line, "Charging")=="Charging"
then
discharging="⚡"
else
discharging=""
end
-- if tonumber(battery_load) < 10 then fontColor="red" else fontColor="black" end
-- table.insert(output,"<span color='" ..fontColor.. "'>")
table.insert(output,discharging.. "" ..battery_load.. "%")
-- table.insert(output,"</span>")
line=fd:read() --read next line
end
return table.concat(output,"|")
end
my_battmon_timer = timer({ timeout = 2 })
my_battmon_timer:connect_signal("timeout", function()
mybattmon:set_markup( '<span background="#92B0A0" font="' .. font .. '"color="#000">BAT: ' .. battery_status() .. '</span>' )
end)
my_battmon_timer:start()
如果我取消注释三个注释行(这意味着当电池电量下降到低于 10% 时改变颜色),我得到以下信息:
当我放入第二块电池时,垂直条在那里分隔。
有人明白为什么改变颜色的三行会使其在文本前后插入条形吗?
当 table 有多个元素时,您正在插入管道。
您的原始代码实际上是这样的(对于单电池盒):
local output={}
table.insert(output, "a")
print(table.concat(output, "|"))
# a
您未注释的代码版本实际上是这样的:
local output={}
table.insert(output, "pre-a")
table.insert(output, "a")
table.insert(output, "post-a")
print(table.concat(output, "|"))
# pre-a|a|post-a
您想将跨度字符串格式化为 table 中的一个条目。
if tonumber(battery_load) < 10 then fontColor="red" else fontColor="black" end
local batstr = "<span color='" ..fontColor.. "'>"
batstr = batstr..discharging.. "" ..battery_load.. "%"
batstr = batstr.."</span>"
table.insert(output,batstr)