Initial conky_printf commit
This commit is contained in:
parent
12fe560b47
commit
c571a09f4b
@ -39,10 +39,11 @@ conky.config = {
|
|||||||
|
|
||||||
conky.text =
|
conky.text =
|
||||||
[[\
|
[[\
|
||||||
RAM:${lua_parse fmt %3.0f%% ${memperc}} \
|
RAM:${lua_parse printf %3.0f%% ${memperc}} \
|
||||||
Swap:${lua_parse fmt %3.0f%% ${swapperc}} \
|
Swap:${lua_parse printf %3.0f%% ${swapperc}} \
|
||||||
CPU:${lua_parse fmt %3.0f%% ${cpu cpu0}} \
|
CPU:${lua_parse printf %3.0f%% ${cpu cpu0}} \
|
||||||
/ ${fs_used /}/${fs_size /} \
|
/ ${fs_used /}/${fs_size /} \
|
||||||
|
${loadavg} \
|
||||||
${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1} \
|
${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1} \
|
||||||
Net: ${lua_parse fmt2 %10s▲%10s▼ ${upspeed wlp4s0} ${downspeed wlp4s0}}
|
Net: ${lua_parse printf %10s▲%10s▼ ${upspeed wlp4s0} ${downspeed wlp4s0}} \
|
||||||
]];
|
]];
|
||||||
|
128
scripts.lua
128
scripts.lua
@ -2,13 +2,127 @@ function trim(s)
|
|||||||
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
return (s:gsub("^%s*(.-)%s*$", "%1"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function conky_fmt(format, a)
|
function split_fmt(f)
|
||||||
return string.format(format, tonumber(trim(conky_parse(a))))
|
if not type(f) == "string" then
|
||||||
|
io.stderr:write("ERROR! Argument '" .. format .. "' is not a string.")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local ret = {}
|
||||||
|
local curr = ""
|
||||||
|
local in_spec = false
|
||||||
|
for char in string.gmatch(f, ".") do
|
||||||
|
if in_spec then
|
||||||
|
if string.match(char, '[cdEefgiouXx]') then
|
||||||
|
curr = curr .. char
|
||||||
|
table.insert(ret, curr)
|
||||||
|
in_spec = false
|
||||||
|
curr = ""
|
||||||
|
elseif string.match(char, '[qs]') then
|
||||||
|
if string.match(curr, '^%%[0-9]*$') then
|
||||||
|
curr = curr .. char
|
||||||
|
table.insert(ret, curr)
|
||||||
|
in_spec = false
|
||||||
|
curr = ""
|
||||||
|
else
|
||||||
|
io.stderr:write("Invalid format: '" .. curr .. char .. "'\n")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
elseif string.match(char, '[0-9%.]') then
|
||||||
|
curr = curr .. char
|
||||||
|
elseif string.match(char, '%%') then
|
||||||
|
if string.match(curr, '^%%') then
|
||||||
|
curr = curr .. char
|
||||||
|
table.insert(ret, curr)
|
||||||
|
in_spec = false
|
||||||
|
curr = ""
|
||||||
|
else
|
||||||
|
io.stderr:write("Invalid format: '" .. curr .. char .. "'\n")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
io.stderr:write("Invalid format: '" .. curr .. char .. "'\n")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if char == '%' then
|
||||||
|
in_spec = true
|
||||||
|
if curr ~= "" then
|
||||||
|
table.insert(ret, curr)
|
||||||
|
end
|
||||||
|
curr = char
|
||||||
|
else
|
||||||
|
curr = curr .. char
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if curr ~= "" then
|
||||||
|
table.insert(ret, curr)
|
||||||
|
end
|
||||||
|
return ret
|
||||||
end
|
end
|
||||||
|
|
||||||
function conky_fmt2(format, a, b)
|
function table_length(t)
|
||||||
as = conky_parse(a)
|
local count = 0
|
||||||
bs = conky_parse(b)
|
for _ in pairs(t) do
|
||||||
|
count = count + 1
|
||||||
return string.format(format, as, bs)
|
end
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
|
function count_formats(formats)
|
||||||
|
if type(formats) ~= 'table' then
|
||||||
|
io.stderr:write("ERROR! formats is not a table.\n")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local count = 0
|
||||||
|
for i,v in ipairs(formats) do
|
||||||
|
if string.match(v, '^%%') and not string.match(v, '%%$') then
|
||||||
|
count = count + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
|
function is_fmt_spec(str)
|
||||||
|
return string.match(str, "^%%")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function conky_printf(format, ...)
|
||||||
|
formats = split_fmt(format)
|
||||||
|
values = {...}
|
||||||
|
|
||||||
|
if count_formats(formats) ~= table_length(values) then
|
||||||
|
io.stderr:write("ERROR! Number of format specifiers to printf doesn't match the number of values passed.\n")
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local parsed_values = {}
|
||||||
|
for i,v in ipairs(values) do
|
||||||
|
parsed_values[i] = conky_parse(v)
|
||||||
|
end
|
||||||
|
for i,fs in ipairs(formats) do
|
||||||
|
if is_fmt_spec(fs) then -- we have a format specifier
|
||||||
|
if string.match(fs, '[dEefgiouXx]$') then -- we have a numeric format specifier, convert value to number
|
||||||
|
parsed_values[i] = tonumber(trim((parsed_values[i])))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local formatted_output = ""
|
||||||
|
local idx = 1
|
||||||
|
for i,fs in ipairs(formats) do
|
||||||
|
if is_fmt_spec(fs) then
|
||||||
|
if not string.match(fs, '%%$') then
|
||||||
|
formatted_output = formatted_output .. string.format(fs, parsed_values[idx])
|
||||||
|
idx = idx + 1
|
||||||
|
else
|
||||||
|
formatted_output = formatted_output .. '%'
|
||||||
|
end
|
||||||
|
else
|
||||||
|
formatted_output = formatted_output .. fs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return formatted_output
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user