이것은 내 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@
46인 230/5로 대체됩니다.
#!/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
말할 파일을 이동 하고 편집한 다음 conky를 실행하기 전에 실행하여 표현식을 평가하고 교체합니다.preconky
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}
]]