10

I currently experimenting with DWM and Conky to create a minimal looking desktop to use for coding and things like that. I've got something nice going on, but there's something I'm having an issue with at the moment. Right now, my Conky TEXT section is centre aligned, which looks nice, but it is also returning information about CPU usage. If the CPU usage is flickering between, say, 9 and 10 %, the overall size of the text is different, and because it's centre aligned, it moved around a bit. Colours removed for a second for clarity, here's a simple version of the line in question...

${alignc}CPU: ${cpu}%

The difference, of course, between the two of

CPU 9%

CPU 10%

is what's causing the issue. How would I go about left-padding the 9 with two zeroes, then 10 with one zero, and then 100 with no zeroes? The only thing I can see vaguely related in the documentation has to deal with decimal place padding, which isn't what I need at all.

JBirch
  • 476

4 Answers4

10

A solution (can't find anything better now, but it works) involves the use of a custom Lua function, here's how you should do:

  1. Create a file for the Lua function, say ~/.conky_lua_scripts.lua with:

    function conky_pad( number )
        return string.format( '%3i' , conky_parse( number ) )
    end
    

    This will pad the number with spaces (imo nicer), if you want zeros just replace '%3i' with '%03i'.

  2. In your .conkyrc add before the TEXT section:

    lua_load ~/.conky_lua_scripts.lua
    
  3. Finally to print a padded value type in your TEXT section something like:

    ${alignc}CPU: ${lua_parse pad ${cpu}}%
    

I tried to keep the Lua function as simple as I can, but you can make a more generic one, if you want, so you can manage any number/value or even change its alignment.

cYrus
  • 22,335
6

Conky finally has it built-in. These options do the trick:

use_spacer left
pad_percents 2
sgtpep
  • 276
3

I had a similar concern while trying to display percentages as, say 04% 05% etc, instead of 1%, 5%, 0%, etc (to avoid the text "jumping around"). I was able to code a simple if structure using $if_match

${if_match ${cpu cpu0}<10}0${endif}${cpu cpu0}%

^^^ What this does is print a 0 in the tens column if ${cpu cpu0} is less than 10. Then it prints the ones column digit. Then it prints the % symbol.

$if_match will print, run, or execute whatever is between itself and the ${endif}

${if_match [COMPARISON]}
...commands                  <<< all i do is print a 0.  heh
${endif}

Here, I'll break it down into components with comments, multi-line

${if_match ${cpu cpu0}<10}  ### is the cpu load less than 10% ?
0                           ### if so, print a 0 !!!
${endif}                    ### thanks bye i had a really good time
%                           ### output formatting.  so it says 08% 
                              # instead of 08
petey
  • 31
1

I usually align the text (CPU) to the left and the values to the right, and specify their exact position. This way the values are "extending" (from 9 to 10 for example) into the empty space between CPU and value.

Patkos Csaba
  • 1,735