0

我正在尝试在 Conky ( battery_bar, fs_bar...) 中自定义我的进度条,以便拥有不同于默认布局的布局,如下所示:

Conky 中的默认进度条

按照这个答案,我设法创建了一个文件系统使用栏,并通过一些代码修改,一个电池状态,看起来像这样。

电池条现在,没有修改。

这个栏是按照以下脚本生成的,这是上一个答案中建议的一个变体:

#!/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 的默认栏对给定的窗口大小“响应”,并且在这方面不会引起问题;因为他们没有问题地调整自己的大小。我想知道它们是如何编程的,以便以最简洁的方式将相同的算法应用于我的代码。

4

2 回答 2

2

您可以相当容易地做的一件事是在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

--开始评论。如果您删除前面的那个,如果您从终端运行 conky,您应该会在 stdout 上print看到类似的内容。result= 13.6该函数接受一个参数,即柱的长度,即 50 个字符。它返回一个 conky 命令字符串,如${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中阅读有关此内容的信息,并查看有关可能性的惊人 示例

于 2016-11-29T20:21:58.407 回答
0

可能不是 100% 回答您的问题,但您可以尝试一下,我在带有 KDE 桌面的树莓派上使用 conky 1.10.6。我使用一行来显示大多数文件系统(使用选项 -x 排除了 vfat 分区)。

${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 "}%" }'}

结果:

康基

干杯

于 2019-04-01T01:43:14.443 回答