这是我的 conky 代码的一部分。
conky.config = {
alignment = 'top_right',
background = true,
color2 = '2ECC71',
cpu_avg_samples = 2,
default_color = 'FFFFFF',
double_buffer = true,
font = 'Bitstream Vera Sans:size=8',
gap_x = 25,
gap_y = 13,
minimum_width = 230,
no_buffers = true,
own_window = true,
own_window_type = 'override',
own_window_transparent = true,
update_interval = 1.0,
use_xft = true,
}
${voffset 20}${goto 40}${color e19e19}${cpugraph 14, $minimum_width e19e19 ffffff}
${goto 40}${color}CPU${font Bitstream Vera Sans:bold:size=8}$alignr$cpu%
${voffset 15}${goto 40}${color}${membar 14, $minimum_width}
${goto 40}${color}RAM${font Bitstream Vera Sans:bold:size=8}$alignr $mem / $memmax $memperc%$font
${voffset 15}${goto 40}${color}${downspeedgraph eno1 14, 115 55ff55 55ff55} $alignr${upspeedgraph eno1 14, 115 554455 ff55ff}
请注意如何在 CPU 图表中使用变量$minimum_width
。我想将这个金额的一半分配给每个 和downspeedgraph
(upspeedgraph
以及必要的偏移量以在之间进行间距)。
/
当我尝试时,除法运算符没有任何作用。有没有办法对conky中的变量进行数学运算来达到预期的效果?
答案1
由于 conky 通常是为了使用而构建的,lua
因此可能有一个涉及该语言的更干净的解决方案,但这里是一个用perl
.它需要一个简单的配置文件,并从conky.config={...}
正在设置的变量中提取部分。例如,minimum_width = 230,
将创建一个同名的 perl 变量并将其设置为该值。
然后它会遍历该conky.text=[[...]]
部分并寻找内部的表达式@...@
。这假设您不将该@
角色用于其他任何用途。然后它会评估您放入其中的 perl 表达式。 Perl 也在$
简单变量前面使用,因此您可以使用类似 的表达式@$minimum_width/5@
,它将被替换为 230/5 即 46。
#!/usr/bin/perl
# https://unix.stackexchange.com/a/445140/119298
# parse conky 1.10 vars in conky.config and eval @expression@ in .text part
use strict;
use Safe;
my $pack = new Safe();
sub replace{
my ($a,$body,$c) = @_;
# $body =~ s/@(.*?)@/eval($1)/gse;
$body =~ s/@(.+?)@/$pack->reval($1)/gse; # evaluate @expression@ using vars
return $a.$body.$c;
}
my $config = join('',<>);
if($config =~ m/conky\.config\s*=\s*\{(.*?)\}/s){
my $vars = "$1,";
while($vars =~ m/\s*([a-z0-9_]+)\s*=\s*(.+?)\s*,/gs){
${$pack->varglob($1)} = $2;
}
}
$config =~ s/(conky\.text\s*=\s*\[\[)(.*?)(\]\])/replace($1,$2,$3)/se;
print $config;
将此脚本放入一个文件中,例如conkyparse
,并使其可执行chmod +x conkyparse
。将文件移动~/.conkyrc
到 say,preconky
并按照上面给出的方式对其进行编辑,然后在运行 conky 之前,运行conkyparse <preconky >~/.conkyrc
以计算和替换表达式。
请注意,您还可以发明和使用自己的变量名称。为了避免 conky 错误,您需要将它们的定义隐藏在注释中(以 开头的行--
)。这是一个示例preconky
文件:
conky.config = {
minimum_width = 230,
-- myvar = 22,
}
conky.text = [[
${goto @3*$myvar@} ${cpugraph 14,@$minimum_width/2@ e19e19 ffffff}
]]
以及生成的输出文件
conky.config = {
minimum_width = 230,
-- myvar = 22,
}
conky.text = [[
${goto 66} ${cpugraph 14,115 e19e19 ffffff}
]]