如何在Conky中编程进度条,如何在我自己的自定义条件中应用它?

时间:2016-11-28 09:30:31

标签: shell monitoring c conky

我尝试在Conky(battery_barfs_bar ...)中自定义进度条,以便拥有默认布局以外的布局,如下所示:

Default progress bar in Conky

this回答后,我设法创建了一个文件系统使用栏,并修改了一些代码,电池状态为1,如下所示。

Battery bar right now, no modifications.

此栏是根据以下脚本生成的,该脚本是上一个答案中建议的变体:

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

1 个答案:

答案 0 :(得分:1)

您可以轻松做的一件事是在 lua 中添加一些编程,以便在绘制条形图之前更改字体大小。大小将根据窗口宽度除以50计算。如果使用比例字体,您可能需要一些小比例因子来解释给定大小的字体可能具有不同宽度的~/mylua.lua字符的事实。

创建一个文件来保存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开始发表评论。如果您删除result= 13.6前面的那个,那么 如果你运行conky,应该在stdout上看到像${font somefont:size=13.6}这样的东西 从终端。该函数采用参数,条形的长度, 即50个字符。它返回一个像..这样的令人生气的命令字符串。 DejaVu Sans Mono是一个连接运算符。上面选择了固定宽度的字体~/.conkyrc,大约是1.2。

conky.config = {...}中,添加lua_load = '~/mylua.lua', 部分(适用于1.10)一行

conky.text = [[...]]

加载代码。在${execpi 30 ~/mydf /} 部分中,替换该行 在哪里调用你的脚本,例如

${lua_parse conky_mysetfont 50}
${execpi 30 ~/mydf /}
$font

Worksheet_Change

即。调用你的lua函数,传递字符数,你的 原始脚本,然后重置原始默认字体和大小。

在conky 1.9中,当您使用鼠标调整窗口大小时,此代码 将更改字体大小以匹配,但在1.10中,大小仅在更改时更改 由于某些内部触发,窗口会改变大小。看来这是一个 回归。

请注意,很多人因为调整大小而没有问题 在固定大小的桌面背景上显示conky。 此外,一旦你开始使用lua,可以选择使用文本作为条形图 是让lua绘制任何类型的图形,如彩色线条和 框。你可以在wiki中了解这一点,看看太棒了 examples 什么是可能的。