我正在尝试在Conky(battery_bar
,fs_bar
...)中自定义我的进度条,以便拥有除默认布局之外的布局,如下所示:
继this回答后,我设法创建了一个文件系统使用栏,并通过一些代码修改,电池状态为1,看起来像这样。
此栏是根据以下脚本生成的,该脚本是上一个答案中建议的变体:
#!/bin/bash
cat /sys/class/power_supply/BAT0/capacity | awk 'NR==1{
n = ($1+0)/2; yellow = 20; red = 40;
if(n>=red) {
r = "${color ff0000}";
for(;n>=red;n--)
r = r "\\#"
}
if(n>=yellow){
y = "${color ffff00}";
for(;n>=yellow;n--)
y = y "\\#"
}
g = "${color 00ff00}";
for(;n>0;n--)
g = g "\\#";
print g y r
}'
我的问题是条的长度是恒定的,它将不断调整Conky窗口的大小,直到它能够显示100%的容量,全尺寸。这显然迫使我的Conky窗口大小至少是那些自定义条的长度,从而使屏幕变形。
就我的实验而言,我可以看到Conky的默认条形图对它们给出的窗口大小有“响应”,并且在这方面永远不会引起问题;因为他们没有问题地调整自己。我想知道它们是如何编程的,以便以最干净的方式将相同的算法应用于我的代码。
你可以相当容易地做的一件事是在lua中添加一些编程来在绘制条形图之前改变字体大小。大小将从窗口宽度除以50计算。如果使用比例字体,您可能需要一些小比例因子来解释给定大小的字体可能具有不同宽度的#
字符这一事实。
创建一个文件来保存lua脚本,例如~/mylua.lua
,如下所示
-- called with (50) return "${font DejaVu Sans Mono:size=13.6}"
function conky_mysetfont(numchars)
if conky_window.width<=0 then return "" end
fontname = "DejaVu Sans Mono"
scale = 1.2
fontsize = conky_window.text_width/tonumber(numchars)*scale
-- print("result=",fontsize) -- debug
return "${font "..fontname..":size="..fontsize.."}"
end
--
开始发表评论。如果你删除print
前面的那个,你应该在stdout上看到类似result= 13.6
的东西,如果你从终端运行conky。该函数采用一个参数,即条形的长度,即50个字符。它返回一个像${font
somefont:size=13.6}
这样令人生气的命令字符串。 ..
是一个连接运算符。上面选择了固定宽度的字体DejaVu Sans Mono
,大约为1.2。
在你的~/.conkyrc
中,在conky.config = {...}
部分(1.10)添加一行
lua_load = '~/mylua.lua',
加载你的代码。在conky.text = [[...]]
部分,替换调用脚本的行,例如
${execpi 30 ~/mydf /}
同
${lua_parse conky_mysetfont 50}
${execpi 30 ~/mydf /}
$font
即调用您的lua函数,传递字符数,原始脚本,然后重置原始默认字体和大小。
在conky 1.9中,当您使用鼠标调整窗口大小时,此代码将更改字体大小以匹配,但在1.10中,仅当窗口由于某些内部触发器而更改大小时,大小才会更改。这似乎是一种回归。
请注意,许多人没有调整大小的问题,因为他们在固定大小的桌面背景上显示conky。此外,一旦你开始使用lua,使用文本的替代方法是让lua绘制任何类型的图形,如彩色线条和框。你可以在wiki上看到这个,看看有什么可能的惊人的examples。
可能不是100%回答你的问题,但你可以尝试一下我在使用KDE桌面的树莓派上使用conky 1.10.6。我使用一行显示大多数文件系统(vfat分区排除了选项-x)。
${execpi 60 df -h --output=source,target -x vfat| grep '^/dev/' | cut --characters=6- | awk '{ print $1," ", $2,"${alignr}${fs_size " $2 "}","${alignr}${color blue}${fs_bar 11,100 " $2"}\n\n\n,${alignr}${voffset -39}${color white}${fs_used_perc " $2 "}%" }'}
结果:
干杯