Initial conky_printf commit
This commit is contained in:
		@@ -39,10 +39,11 @@ conky.config = {
 | 
			
		||||
 | 
			
		||||
conky.text = 
 | 
			
		||||
[[\
 | 
			
		||||
RAM:${lua_parse fmt %3.0f%% ${memperc}} \
 | 
			
		||||
Swap:${lua_parse fmt %3.0f%% ${swapperc}} \
 | 
			
		||||
CPU:${lua_parse fmt %3.0f%% ${cpu cpu0}} \
 | 
			
		||||
RAM:${lua_parse printf %3.0f%% ${memperc}} \
 | 
			
		||||
Swap:${lua_parse printf %3.0f%% ${swapperc}} \
 | 
			
		||||
CPU:${lua_parse printf %3.0f%% ${cpu cpu0}} \
 | 
			
		||||
/ ${fs_used /}/${fs_size /} \
 | 
			
		||||
${loadavg} \
 | 
			
		||||
${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"))
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function conky_fmt(format, a)
 | 
			
		||||
    return string.format(format, tonumber(trim(conky_parse(a))))
 | 
			
		||||
function split_fmt(f)
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
function conky_fmt2(format, a, b)
 | 
			
		||||
    as = conky_parse(a)
 | 
			
		||||
    bs = conky_parse(b)
 | 
			
		||||
 | 
			
		||||
    return string.format(format, as, bs)
 | 
			
		||||
function table_length(t)
 | 
			
		||||
    local count = 0
 | 
			
		||||
    for _ in pairs(t) do
 | 
			
		||||
        count = count + 1
 | 
			
		||||
    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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user