修改 Conky 来处理可变长度值

修改 Conky 来处理可变长度值

我目前正在尝试使用 DWM 和 Conky 创建一个外观简约的桌面,用于编码和类似操作。我有一些不错的功能,但目前遇到了一些问题。目前,我的 ConkyTEXT部分是居中对齐的,看起来不错,但它也会返回有关 CPU 使用率的信息。如果 CPU 使用率在 9% 和 10% 之间闪烁,则文本的整体大小会有所不同,而且由于它是居中对齐的,所以它会稍微移动。为了清晰起见,暂时去掉了颜色,这是有问题的线条的简单版本...

${alignc}CPU: ${cpu}%

当然,两者之间的区别

CPU 9%

CPU 10%

是导致问题的原因。我该如何在 9 的左侧填充两个零,在 10 的左侧填充一个零,在 100 的左侧不填充零?我在文档中看到的唯一模糊相关内容与小数位填充有关,而这根本不是我所需要的。

答案1

一个解决方案(现在找不到更好的方法,但它有效)涉及使用自定义 Lua 函数,您应该这样做:

  1. 为 Lua 函数创建一个文件,例如~/.conky_lua_scripts.lua

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

    这将用空格填充数字(我认为更好),如果您想要零,只需将“%3i”替换为“%03i”。

  2. 在您.conkyrc添加的部分之前TEXT

    lua_load ~/.conky_lua_scripts.lua
    
  3. 最后,在您的部分中打印填充的值类型,TEXT例如:

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

我试图使 Lua 函数尽可能简单,但如果您愿意,您可以创建一个更通用的函数,这样您就可以管理任何数字/值,甚至可以更改其对齐方式。

答案2

Conky 终于将其内置了。这些选项可以解决问题:

use_spacer left
pad_percents 2

答案3

当我尝试显示百分比时,例如 04% 05% 等,而不是 1%、5%、0% 等(以避免文本“跳来跳去”),我也有类似的担忧。我能够使用$if_match

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

${cpu cpu0}^^^ 如果小于 10,则 在十位数打印 0。然后打印个位数。然后打印 % 符号。

$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}

在这里,我将把它分解成带有注释的组件,多行

${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

答案4

我通常将文本 (CPU) 左对齐,将值右对齐,并指定它们的准确位置。这样,值就会“延伸”(例如从 9 到 10)到 CPU 和值之间的空白处。

相关内容