Como o conky geralmente é construído para usar lua
, pode haver uma solução mais limpa envolvendo esse idioma, mas aqui está um script de pré-processamento rápido escrito em perl
. Ele espera um arquivo de configuração simples e extrai da parte conky.config={...}
as variáveis que estão sendo definidas. Por exemplo, minimum_width = 230,
criará uma variável perl com o mesmo nome e a configurará para esse valor.
Em seguida, ele passa pela parte conky.text=[[...]]
e procura expressões dentro de @...@
. Isso pressupõe que você não use o caractere @
para qualquer outra coisa. Em seguida, ele avalia a expressão perl que você colocou dentro dela. Perl também usa $
na frente de variáveis simples, então você pode usar expressões como @$minimum_width/5@
e ele será substituído por 230/5, ou seja, 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;
Coloque esse script em um arquivo, diga conkyparse
, e torne-o executável com chmod +x conkyparse
. Mova o arquivo ~/.conkyrc
para o valor preconky
e edite-o conforme indicado acima. Em seguida, antes de executar o conky, execute conkyparse <preconky >~/.conkyrc
para que as expressões sejam calculadas e substituídas.
Note que você também pode inventar e usar seus próprios nomes de variáveis. Para evitar um erro de conky, você precisa ocultar sua definição dentro de um comentário (uma linha iniciando --
).
Aqui está um exemplo de preconky
file:
conky.config = {
minimum_width = 230,
-- myvar = 22,
}
conky.text = [[
${goto @3*$myvar@} ${cpugraph 14,@$minimum_width/2@ e19e19 ffffff}
]]
e o arquivo de saída resultante
conky.config = {
minimum_width = 230,
-- myvar = 22,
}
conky.text = [[
${goto 66} ${cpugraph 14,115 e19e19 ffffff}
]]