You are not logged in.
I've been playing with Conky today and incorporated a Diary and ToDo list:
http://i.imgur.com/0nzQYgSm.png
I adapted the code for the diary from this conky_todo.sh by Magyar on the Arch Forum . Feeling quite pleased with myself as I haven't got a clue what I'm doing. Anyway, this is what I came up with:
#!/bin/bash IFS=$'\n' for i in `seq 0 5` do if [ $i -eq 0 ] then printf "${color}$(date "+%A")" else printf "${color}$(date -d "$i day" "+%A")" fi TODO="$(grep `date -d "$i day" +%d/%m/%y` ~/Documents/diary.txt | sort -k2,1n)" for WORD in $TODO do DATE="$(echo $WORD | awk '{print $1}')" TIME="$(echo $WORD | awk '{print $2}')" TASK="$(echo $WORD | cut -c21-57)" printf "\n$TASK" done printf "\n\n" done
Edit: I did come across a problem - when I replaced the short diary entries shown in the Conky with real, longer entries they got cut off after the first half a dozen. I had to increase text_buffer_size in the Conkyrc and that seems to have fixed it.
What a neat idea. Nice job.
Offline
https://github.com/ninlith/subsolar
Mod Note: Oversized image replaced with thumbnail link, please limit images to ~250x250px
-HoaS
Offline
^ ninlith, welcome to the forums!
you made a grand entrance, it seems. i'll have to check that out.
Last edited by ohnonot (2021-07-03 10:32:03)
Offline
Thanks :) Mrpeachy's guide got me started when there was still CrunchBang. Inland: Hämeenlinna.
Offline
Greetings!
Last edited by ohnonot (2021-07-03 10:30:46)
Offline
Offline
@ninlith
I'm getting old, I can't see it ... but what I can see I like!
Debian 12 Beardog, SoxDog and still a Conky 1.9er
Offline
ninlith wrote:Best conky ever!!
wow I'm agree that's a beautifull piece of conky, I would like to try it but unfortunately some packages missing with bunsen... (python3-ephem gcalcli...)
Offline
This Conky just keeps growing. Looking good though, individual processor bars for each core, and a status indicator at the bottom for my cloud server.
default_color FF9F00 # Orange
color0 DF4F00 # Darker Orange
color1 009FFF # Blue
color2 9FFF00 # Green
color3 8F8F8F # Grey
color4 CE0000 # Red
TEXT
$color1$alignc> > > $color2${exec whoami}@$nodename$color1 < < <
$color3$hr
${color}Kernel:${alignr}${kernel}
Uptime:${alignr}${uptime}
Time:${alignr}${time %H:%M}
UTC:${alignr}${utime %H:%M}
Volume:${alignr}${exec amixer -c 0 get Master | grep Mono: | cut -d " " -f6}
$color1$alignc> > >$color2 P O W E R$color1 < < <
$color3$hr
${color}Power:${alignr}${battery BAT1}
$color0${battery_bar BAT1}
${color}Remaining:${alignr}${battery_time BAT1}
${color1}${alignc}> > >$color2 M E M O R Y$color1 < < <
$color3$hr
${color}${goto 60}Used${alignr}Size
SSD${goto 60}${fs_used /}${alignr}${fs_size /}
$color0${fs_bar /}
$color${goto 60}MEM${alignr}MAX
RAM${goto 60}${mem}${alignr}${memmax}
$color0$membar
$swapbar
${color}Swap${goto 60}${swap}${alignr}${swapmax}
${color1}${alignc}> > >$color2 C P U$color1 < < <
$color3$hr
${color}CPU:${alignr}Intel Core i7-3537U
${goto 60}Used${alignr 30}GHz${alignr}Temp
Avg${goto 60}${if_match ${cpu cpu0}<10} ${cpu cpu0}\
${else}${if_match ${cpu cpu0}<100} ${cpu cpu0}\
${else}${cpu cpu0}${endif}${endif}%${alignr 30}${freq_g}\
${alignr}${hwmon 0 temp 1}°C
${color0}${cpugraph cpu0}
${cpubar cpu1 6,48}${goto 57}${cpubar cpu2 6,48}${goto 107}${cpubar cpu3 6,48}${goto 157}${cpubar cpu4 6,48}
${color}Process: $alignr PID: CPU:
${top name 1} $alignr ${top pid 1} ${top cpu 1}%
${top name 2} $alignr ${top pid 2} ${top cpu 2}%
${top name 3} $alignr ${top pid 3} ${top cpu 3}%
${top name 4} $alignr ${top pid 4} ${top cpu 4}%
${top name 5} $alignr ${top pid 5} ${top cpu 5}%
${top name 6} $alignr ${top pid 6} ${top cpu 6}%
${top name 7} $alignr ${top pid 7} ${top cpu 7}%
${top name 8} $alignr ${top pid 8} ${top cpu 8}%
${color1}${alignc}> > >$color2 N E T W O R K$color1 < < <
$color3$hr
${color}Internal IP:${alignr}${addr wlan0}
External IP:${alignr}${execi 300 wget -q -O - http://icanhazip.com}
SSID:${alignr}${wireless_essid wlan0}
${color0}${wireless_link_bar wlan0}
${color}Download:${alignr}${downspeed wlan0}
${color0}${downspeedgraph wlan0}
${upspeedgraph wlan0}
${color}Upload:${alignr}${upspeed wlan0}
Pumarax Status:${if_match "${execi 60 ssh -p 1234 fakeuser@someaddress.com du -hs}"==""}${alignr}${color4}Offline${else}${alignr}${color2}Online${endif}
Lenovo IdeaPad Yoga 13 | BunsenLabs Hydrogen (x64)
Intel Core i7-3537U | Intel HD4000 | 8GB DDR3 | 256GB SSD
Offline
wow I'm agree that's a beautifull piece of conky, I would like to try it but unfortunately some packages missing with bunsen... (python3-ephem gcalcli...)
The latest revision should partly work without the missing packages (use the old_syntax configs).
Offline
ragamatrix wrote:wow I'm agree that's a beautifull piece of conky, I would like to try it but unfortunately some packages missing with bunsen... (python3-ephem gcalcli...)
The latest revision should partly work without the missing packages (use the old_syntax configs).
And here's one way to get everything running:
sudo sh -c "test -e /etc/apt/sources.list.d/debian-jessie-backports.list \
|| echo 'deb http://httpredir.debian.org/debian jessie-backports main' \
> /etc/apt/sources.list.d/debian-jessie-backports.list"
sudo apt-get update
sudo apt-get -t jessie-backports install gmt gmt-gshhg
sudo apt-get install virtualenv python-dev gcc qdbus librsvg2-bin xmlstarlet \
fonts-cantarell geoclue-2.0 geographiclib-tools gnome-icon-theme-symbolic \
conky-all inxi git
git clone https://github.com/ninlith/subsolar.git ~/.conky/subsolar
sudo /usr/sbin/geographiclib-get-magnetic wmm2010
cd ~/.conky/subsolar
virtualenv venv
source venv/bin/activate
pip install pyephem gcalcli
gcalcli agenda # set up gcalcli if applicable
deactivate
# run:
source ~/.conky/subsolar/venv/bin/activate
conky -c ~/.conky/subsolar/subsolar.conkyrc-old_syntax &
conky -c ~/.conky/subsolar/bottom.conkyrc-old_syntax &
deactivate
Offline
Conky to suit 1366x768 screens
Electro Conky: zipfile with lua and weather scripts, as well as a README.
Be Excellent to Each Other...
The Bunsenlabs Lithium Desktop » Here
FORUM RULES and posting guidelines «» Help page for forum post formatting
Artwork on DeviantArt «» BunsenLabs on DeviantArt
Offline
^ Very nice damo. Do I detect a touch of falldown in there?
Debian 12 Beardog, SoxDog and still a Conky 1.9er
Offline
^ Very nice damo. Do I detect a touch of falldown in there?
That gave me the idea
Be Excellent to Each Other...
The Bunsenlabs Lithium Desktop » Here
FORUM RULES and posting guidelines «» Help page for forum post formatting
Artwork on DeviantArt «» BunsenLabs on DeviantArt
Offline
It shows.
Debian 12 Beardog, SoxDog and still a Conky 1.9er
Offline
Hi ninlith,
Thanks so much trying to help me (eternal noob)... I got errors when launching conkys... The bottom one make my screen x11 buggy... blinking screen ?? For the subsolar conky I got the lua drawings, no earth map and this error message:
conky -c ~/.conky/subsolar/subsolar.conkyrc-old_syntax
Conky: desktop window (b5) is root window
Conky: window type - desktop
Conky: drawing to created window (0x2c00001)
Conky: drawing to double buffer
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
WARNING: Time 2016.43 outside allowed range [2010,2015]
Conky: received SIGINT or SIGTERM to terminate. bye!
Offline
The warning messages are from geographiclib-tools/MagneticField and can be ignored.
As for blinking, I have no clue. Try adding minimum_size or experimenting with own_window_type parameters or something. What window manager, etc., are you using?
Does the following produce an earth map (/tmp/earth.png)?
gmt pscoast --MAP_ORIGIN_X=0i --MAP_ORIGIN_Y=0i --PS_MEDIA=1ix1i -Rg \
-JG0/0/1i -Dc -A1000 -G0/0/0 -P > /tmp/earth.ps \
&& gmt psconvert /tmp/earth.ps -E200 -TG -F/tmp/earth.png
Offline
Thanks, these lines code gives me an earth.png in the tmp folder, I'll check today for the rest and I'll post again if I have problem again. My WM is openbox (bunsenlabs)
Offline
Hi!
@Sector11>
conky-girlytime-sys:
#============================================#
# ragamatrix'
#
#============================================#
# Settings
#============================================#
background yes
#font -*-snap-normal-*-*-*-10-*-*-*-*-*-iso10646-*
use_xft yes
xftfont Zero Twos:pixelsize=12
xftalpha 0.8
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent yes
own_window_colour 222222
own_window_type desktop
own_window_title Conky Quadrat
double_buffer yes
## taille ##
minimum_size 250 250
maximum_width 250
## ##
draw_shades no
draw_outline no
draw_borders no
border_inner_margin 5
border_width 1
draw_graph_borders no
default_bar_size 60 10
default_color 3D3DFD
#default_color 005885
color1 DBDBDB
color2 ABABAB
color3 7D7D7D
default_shade_color black
default_outline_color white
alignment tr
gap_x 15
gap_y 10
no_buffers yes
uppercase no
text_buffer_size 1024
top_name_width 10
imlib_cache_size 0
cpu_avg_samples 2
show_graph_scale no
show_graph_range no
short_units yes
override_utf8_locale yes
use_spacer none
if_up_strictness address
##############################################
# Output #
##############################################
# -- Lua load -- #
lua_load /your/path/.conky/timesys/call_multi.lua
lua_draw_hook_pre main
#at least one line (empty or not) after TEXT
TEXT
call_multi.lua: < the path must be the complete one, not $HOME or ~/ >
function conky_main()
dofile ('/your/path/.conky/timesys/conky_8.lua')
dofile ('/your/path/.conky/timesys/textsys.lua')
dofile ('/your/path/.conky/timesys/netgraph.lua')
conky_main_bars()
conky_draw_text()
conky_main_graph()
end
conky_8.lua:
--[[ BARGRAPH WIDGET
v2.1 by wlourf (07 Jan. 2011)
edited by Caymus
this widget draws a bargraph with different effects
http://u-scripts.blogspot.com/2010/07/bargraph-widget.html
To call the script in a conky, use, before TEXT
lua_load /path/to/the/script/bargraph.lua
lua_draw_hook_pre main_rings
and add one line (blank or not) after TEXT
Parameters are :
3 parameters are mandatory
name - the name of the conky variable to display, for example for {$cpu cpu0}, just write name="cpu"
arg - the argument of the above variable, for example for {$cpu cpu0}, just write arg="cpu0"
arg can be a numerical value if name=""
max - the maximum value the above variable can reach, for example, for {$cpu cpu0}, just write max=100
Optional parameters:
x,y - coordinates of the starting point of the bar, default = middle of the conky window
cap - end of cap line, ossibles values are r,b,s (for round, butt, square), default="b"
http://www.cairographics.org/samples/set_line_cap/
angle - angle of rotation of the bar in degress, default = 0 (i.e. a vertical bar)
set to 90 for an horizontal bar
skew_x - skew bar around x axis, default = 0
skew_y - skew bar around y axis, default = 0
blocks - number of blocks to display for a bar (values >0) , default= 10
height - height of a block, default=10 pixels
width - width of a block, default=20 pixels
space - space between 2 blocks, default=2 pixels
angle_bar - this angle is used to draw a bar on a circular way (ok, this is no more a bar !) default=0
radius - for cicular bars, internal radius, default=0
with radius, parameter width has no more effect.
Colours below are defined into braces {colour in hexadecimal, alpha}
fg_colour - colour of a block ON, default= {0x00FF00,1}
bg_colour - colour of a block OFF, default = {0x00FF00,0.5}
alarm - threshold, values after this threshold will use alarm_colour colour , default=max
alarm_colour - colour of a block greater than alarm, default=fg_colour
smooth - (true or false), create a gradient from fg_colour to bg_colour, default=false
mid_colour - colours to add to gradient, with this syntax {position into the gradient (0 to1), colour hexa, alpha}
for example, this table {{0.25,0xff0000,1},{0.5,0x00ff00,1},{0.75,0x0000ff,1}} will add
3 colurs to gradient created by fg_colour and alarm_colour, default=no mid_colour
led_effect - add LED effects to each block, default=no led_effect
if smooth=true, led_effect is not used
possibles values : "r","a","e" for radial, parallelel, perdendicular to the bar (just try!)
led_effect has to be used with theses colours :
fg_led - middle colour of a block ON, default = fg_colour
bg_led - middle colour of a block OFF, default = bg_colour
alarm_led - middle colour of a block > ALARM, default = alarm_colour
reflection parameters, not avaimable for circular bars
reflection_alpha - add a reflection effect (values from 0 to 1) default = 0 = no reflection
other values = starting opacity
reflection_scale - scale of the reflection (default = 1 = height of text)
reflection_length - length of reflection, define where the opacity will be set to zero
calues from 0 to 1, default =1
reflection - position of reflection, relative to a vertical bar, default="b"
possibles values are : "b","t","l","r" for bottom, top, left, right
draw_me - if set to false, text is not drawn (default = true or 1)
it can be used with a conky string, if the string returns 1, the text is drawn :
example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",
v1.0 (10 Feb. 2010) original release
v1.1 (13 Feb. 2010) numeric values can be passed instead conky stats with parameters name="", arg = numeric_value
v1.2 (28 Feb. 2010) just renamed the widget to bargraph
v1.3 (03 Mar. 2010) added parameters radius & angle_bar to draw the bar in a circular way
v2.0 (12 Jul. 2010) rewrite script + add reflection effects and parameters are now set into tables
v2.1 (07 Jan. 2011) Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness"
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation version 3 (GPLv3)
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-- MA 02110-1301, USA.
]]
require 'cairo'
----------------START OF PARAMETERS ----------
function conky_main_bars()
local bars_settings={
{
name="fs_used_perc",
arg="/home",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=97,
blocks=25,
height=3,width=3,
angle=90,
smooth=true,
cap="e",
skew_y=5,
mid_colour={{0.5,0xD04BFF,1}},
},
--sda3
{
name="fs_used_perc",
arg="/your/path",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=117,
blocks=25,
height=3,width=3,
angle=90,
smooth=true,
cap="e",
skew_y=5,
mid_colour={{0.5,0xD04BFF,1}},
},
--sdb1
{
name="fs_used_perc",
arg="/your/path/disk",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=137,
blocks=25,
height=3,width=3,
angle=90,
smooth=true,
cap="e",
skew_y=5,
mid_colour={{0.5,0xD04BFF,1}},
},
--sdb3
{
name="fs_used_perc",
arg="/your/path/disk2",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=157,
blocks=25,
height=3,width=3,
angle=90,
smooth=true,
cap="e",
skew_y=5,
mid_colour={{0.5,0xD04BFF,1}},
},
{
name="cpu",
arg="cpu1",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=177,
blocks=25,
height=3,width=3,
angle=90,
smooth=true,
cap="e",
skew_y=5,
mid_colour={{0.5,0xD04BFF,1}},
},
{
name="memperc",
arg="%S",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=197,
blocks=20,
height=3,width=3,
angle=90,
smooth=true,
cap="e",
skew_y=5,
mid_colour={{0.5,0xD04BFF,1}},
},
--[[{
name="fs_used_perc",
arg="/home",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=50,y=8,
blocks=20,
height=3,width=9,
angle=90,
smooth=true,
cap="e",
skew_y=15,
mid_colour={{0.5,0x00ff00,1}},
},
{
name="downspeedf",
arg="eth0",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=800,y=35,
blocks=20,
height=3,width=9,
angle=-90,
smooth=true,
cap="e",
skew_y=15,
mid_colour={{0.5,0x00ff00,1}},
},
{
name="upspeedf",
arg="eth0",
max=100,
alarm=80,
bg_colour={0x3D3DFD,0.25},
fg_colour={0x3D3DFD,1},
alarm_colour={0xff0000,1},
x=890,y=25,
blocks=20,
height=3,width=9,
angle=90,
smooth=true,
cap="e",
skew_y=-15,
mid_colour={{0.5,0x00ff00,1}}
},--]]
}
-----------END OF PARAMETERS--------------
if conky_window == nil then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create(cs)
--prevent segmentation error when reading cpu state
if tonumber(conky_parse('${updates}'))>3 then
for i in pairs(bars_settings) do
draw_multi_bar_graph(bars_settings[i])
end
end
cairo_destroy(cr)
cairo_surface_destroy(cs)
cr=nil
end
function draw_multi_bar_graph(t)
cairo_save(cr)
--check values
if t.draw_me == true then t.draw_me = nil end
if t.draw_me ~= nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end
if t.name==nil and t.arg==nil then
print ("No input values ... use parameters 'name' with 'arg' or only parameter 'arg' ")
return
end
if t.max==nil then
print ("No maximum value defined, use 'max'")
return
end
if t.name==nil then t.name="" end
if t.arg==nil then t.arg="" end
--set default values
if t.x == nil then t.x = conky_window.width/2 end
if t.y == nil then t.y = conky_window.height/2 end
if t.blocks == nil then t.blocks=10 end
if t.height == nil then t.height=10 end
if t.angle == nil then t.angle=0 end
t.angle = t.angle*math.pi/180
--line cap style
if t.cap==nil then t.cap = "b" end
local cap="b"
for i,v in ipairs({"s","r","b"}) do
if v==t.cap then cap=v end
end
local delta=0
if t.cap=="r" or t.cap=="s" then delta = t.height end
if cap=="s" then cap = CAIRO_LINE_CAP_SQUARE
elseif cap=="r" then
cap = CAIRO_LINE_CAP_ROUND
elseif cap=="b" then
cap = CAIRO_LINE_CAP_BUTT
end
--end line cap style
--if t.led_effect == nil then t.led_effect="r" end
if t.width == nil then t.width=20 end
if t.space == nil then t.space=2 end
if t.radius == nil then t.radius=0 end
if t.angle_bar == nil then t.angle_bar=0 end
t.angle_bar = t.angle_bar*math.pi/360 --halt angle
--colours
if t.bg_colour == nil then t.bg_colour = {0x00FF00,0.5} end
if #t.bg_colour~=2 then t.bg_colour = {0x00FF00,0.5} end
if t.fg_colour == nil then t.fg_colour = {0x00FF00,1} end
if #t.fg_colour~=2 then t.fg_colour = {0x00FF00,1} end
if t.alarm_colour == nil then t.alarm_colour = t.fg_colour end
if #t.alarm_colour~=2 then t.alarm_colour = t.fg_colour end
if t.mid_colour ~= nil then
for i=1, #t.mid_colour do
if #t.mid_colour[i]~=3 then
print ("error in mid_color table")
t.mid_colour[i]={1,0xFFFFFF,1}
end
end
end
if t.bg_led ~= nil and #t.bg_led~=2 then t.bg_led = t.bg_colour end
if t.fg_led ~= nil and #t.fg_led~=2 then t.fg_led = t.fg_colour end
if t.alarm_led~= nil and #t.alarm_led~=2 then t.alarm_led = t.fg_led end
if t.led_effect~=nil then
if t.bg_led == nil then t.bg_led = t.bg_colour end
if t.fg_led == nil then t.fg_led = t.fg_colour end
if t.alarm_led == nil then t.alarm_led = t.fg_led end
end
if t.alarm==nil then t.alarm = t.max end --0.8*t.max end
if t.smooth == nil then t.smooth = false end
if t.skew_x == nil then
t.skew_x=0
else
t.skew_x = math.pi*t.skew_x/180
end
if t.skew_y == nil then
t.skew_y=0
else
t.skew_y = math.pi*t.skew_y/180
end
if t.reflection_alpha==nil then t.reflection_alpha=0 end
if t.reflection_length==nil then t.reflection_length=1 end
if t.reflection_scale==nil then t.reflection_scale=1 end
--end of default values
local function rgb_to_r_g_b(col_a)
return ((col_a[1] / 0x10000) % 0x100) / 255., ((col_a[1] / 0x100) % 0x100) / 255., (col_a[1] % 0x100) / 255., col_a[2]
end
--functions used to create patterns
local function create_smooth_linear_gradient(x0,y0,x1,y1)
local pat = cairo_pattern_create_linear (x0,y0,x1,y1)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour))
if t.mid_colour ~=nil then
for i=1, #t.mid_colour do
cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]}))
end
end
return pat
end
local function create_smooth_radial_gradient(x0,y0,r0,x1,y1,r1)
local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour))
if t.mid_colour ~=nil then
for i=1, #t.mid_colour do
cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]}))
end
end
return pat
end
local function create_led_linear_gradient(x0,y0,x1,y1,col_alp,col_led)
local pat = cairo_pattern_create_linear (x0,y0,x1,y1) ---delta, 0,delta+ t.width,0)
cairo_pattern_add_color_stop_rgba (pat, 0.0, rgb_to_r_g_b(col_alp))
cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led))
cairo_pattern_add_color_stop_rgba (pat, 1.0, rgb_to_r_g_b(col_alp))
return pat
end
local function create_led_radial_gradient(x0,y0,r0,x1,y1,r1,col_alp,col_led,mode)
local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1)
if mode==3 then
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_alp))
cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp))
else
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_led))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp))
end
return pat
end
local function draw_single_bar()
--this fucntion is used for bars with a single block (blocks=1) but
--the drawing is cut in 3 blocks : value/alarm/background
--not zvzimzblr for circular bar
local function create_pattern(col_alp,col_led,bg)
local pat
if not t.smooth then
if t.led_effect=="e" then
pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led)
elseif t.led_effect=="a" then
pat = create_led_linear_gradient (t.width/2, 0,t.width/2,-t.height,col_alp,col_led)
elseif t.led_effect=="r" then
pat = create_led_radial_gradient (t.width/2, -t.height/2, 0, t.width/2,-t.height/2,t.height/1.5,col_alp,col_led,2)
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp))
end
else
if bg then
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour))
else
pat = create_smooth_linear_gradient(t.width/2, 0, t.width/2,-t.height)
end
end
return pat
end
local y1=-t.height*pct/100
local y2,y3
if pct>(100*t.alarm/t.max) then
y1 = -t.height*t.alarm/100
y2 = -t.height*pct/100
if t.smooth then y1=y2 end
end
if t.angle_bar==0 then
--block for fg value
local pat = create_pattern(t.fg_colour,t.fg_led,false)
cairo_set_source(cr,pat)
cairo_rectangle(cr,0,0,t.width,y1)
cairo_fill(cr)
cairo_pattern_destroy(pat)
-- block for alarm value
if not t.smooth and y2 ~=nil then
pat = create_pattern(t.alarm_colour,t.alarm_led,false)
cairo_set_source(cr,pat)
cairo_rectangle(cr,0,y1,t.width,y2-y1)
cairo_fill(cr)
y3=y2
cairo_pattern_destroy(pat)
else
y2,y3=y1,y1
end
-- block for bg value
cairo_rectangle(cr,0,y2,t.width,-t.height-y3)
pat = create_pattern(t.bg_colour,t.bg_led,true)
cairo_set_source(cr,pat)
cairo_pattern_destroy(pat)
cairo_fill(cr)
end
end --end single bar
local function draw_multi_bar()
--function used for bars with 2 or more blocks
for pt = 1,t.blocks do
--set block y
local y1 = -(pt-1)*(t.height+t.space)
local light_on=false
--set colors
local col_alp = t.bg_colour
local col_led = t.bg_led
if pct>=(100/t.blocks) or pct>0 then --ligth on or not the block
if pct>=(pcb*(pt-1)) then
light_on = true
col_alp = t.fg_colour
col_led = t.fg_led
if pct>=(100*t.alarm/t.max) and (pcb*pt)>(100*t.alarm/t.max) then
col_alp = t.alarm_colour
col_led = t.alarm_led
end
end
end
--set colors
--have to try to create gradients outside the loop ?
local pat
if not t.smooth then
if t.angle_bar==0 then
if t.led_effect=="e" then
pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led)
elseif t.led_effect=="a" then
pat = create_led_linear_gradient (t.width/2, -t.height/2+y1,t.width/2,0+t.height/2+y1,col_alp,col_led)
elseif t.led_effect=="r" then
pat = create_led_radial_gradient (t.width/2, y1, 0, t.width/2,y1,t.width/1.5,col_alp,col_led,2)
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp))
end
else
if t.led_effect=="a" then
pat = create_led_radial_gradient (0, 0, t.radius+(t.height+t.space)*(pt-1),
0, 0, t.radius+(t.height+t.space)*(pt),
col_alp,col_led,3)
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp))
end
end
else
if light_on then
if t.angle_bar==0 then
pat = create_smooth_linear_gradient(t.width/2, t.height/2, t.width/2,-(t.blocks-0.5)*(t.height+t.space))
else
pat = create_smooth_radial_gradient(0, 0, (t.height+t.space), 0,0,(t.blocks+1)*(t.height+t.space),2)
end
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour))
end
end
cairo_set_source (cr, pat)
cairo_pattern_destroy(pat)
--draw a block
if t.angle_bar==0 then
cairo_move_to(cr,0,y1)
cairo_line_to(cr,t.width,y1)
else
cairo_arc( cr,0,0,
t.radius+(t.height+t.space)*(pt)-t.height/2,
-t.angle_bar -math.pi/2 ,
t.angle_bar -math.pi/2)
end
cairo_stroke(cr)
end
end
local function setup_bar_graph()
--function used to retrieve the value to display and to set the cairo structure
if t.blocks ~=1 then t.y=t.y-t.height/2 end
local value = 0
if t.name ~="" then
value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg)))
--$to_bytes doesn't work when value has a decimal point,
--https://garage.maemo.org/plugins/ggit/browse.php/?p=monky;a=commitdiff;h=174c256c81a027a2ea406f5f37dc036fac0a524b;hp=d75e2db5ed3fc788fb8514121f67316ac3e5f29f
--http://sourceforge.net/tracker/index.php?func=detail&aid=3000865&group_id=143975&atid=757310
--conky bug?
--value = (conky_parse(string.format('${%s %s}', t.name, t.arg)))
--if string.match(value,"%w") then
-- value = conky_parse(string.format('${to_bytes %s}',value))
--end
else
value = tonumber(t.arg)
end
if value==nil then value =0 end
pct = 100*value/t.max
pcb = 100/t.blocks
cairo_set_line_width (cr, t.height)
cairo_set_line_cap (cr, cap)
cairo_translate(cr,t.x,t.y)
cairo_rotate(cr,t.angle)
local matrix0 = cairo_matrix_t:create()
tolua.takeownership(matrix0)
cairo_matrix_init (matrix0, 1,t.skew_y,t.skew_x,1,0,0)
cairo_transform(cr,matrix0)
--call the drawing function for blocks
if t.blocks==1 and t.angle_bar==0 then
draw_single_bar()
if t.reflection=="t" or t.reflection=="b" then cairo_translate(cr,0,-t.height) end
else
draw_multi_bar()
end
--dot for reminder
--[[
if t.blocks ~=1 then
cairo_set_source_rgba(cr,1,0,0,1)
cairo_arc(cr,0,t.height/2,3,0,2*math.pi)
cairo_fill(cr)
else
cairo_set_source_rgba(cr,1,0,0,1)
cairo_arc(cr,0,0,3,0,2*math.pi)
cairo_fill(cr)
end]]
--call the drawing function for reflection and prepare the mask used
if t.reflection_alpha>0 and t.angle_bar==0 then
local pat2
local matrix1 = cairo_matrix_t:create()
tolua.takeownership(matrix1)
if t.angle_bar==0 then
pts={-delta/2,(t.height+t.space)/2,t.width+delta,-(t.height+t.space)*(t.blocks)}
if t.reflection=="t" then
cairo_matrix_init (matrix1,1,0,0,-t.reflection_scale,0,-(t.height+t.space)*(t.blocks-0.5)*2*(t.reflection_scale+1)/2)
pat2 = cairo_pattern_create_linear (t.width/2,-(t.height+t.space)*(t.blocks),t.width/2,(t.height+t.space)/2)
elseif t.reflection=="r" then
cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,delta+2*t.width,0)
pat2 = cairo_pattern_create_linear (delta/2+t.width,0,-delta/2,0)
elseif t.reflection=="l" then
cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,-delta,0)
pat2 = cairo_pattern_create_linear (-delta/2,0,delta/2+t.width,-0)
else --bottom
cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(t.height+t.space)*(t.reflection_scale+1)/2)
pat2 = cairo_pattern_create_linear (t.width/2,(t.height+t.space)/2,t.width/2,-(t.height+t.space)*(t.blocks))
end
end
cairo_transform(cr,matrix1)
if t.blocks==1 and t.angle_bar==0 then
draw_single_bar()
cairo_translate(cr,0,-t.height/2)
else
draw_multi_bar()
end
cairo_set_line_width(cr,0.01)
cairo_pattern_add_color_stop_rgba (pat2, 0,0,0,0,1-t.reflection_alpha)
cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)
if t.angle_bar==0 then
cairo_rectangle(cr,pts[1],pts[2],pts[3],pts[4])
end
cairo_clip_preserve(cr)
cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
cairo_stroke(cr)
cairo_mask(cr,pat2)
cairo_pattern_destroy(pat2)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
end --reflection
pct,pcb=nil
end --setup_bar_graph()
--start here !
setup_bar_graph()
cairo_restore(cr)
end
function conky_main_box()
if conky_window==nil then return end
---------------------- PARAMETERS BEGIN HERE
local boxes_settings={
{x=0,y=50,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
{x=0,y=195,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
{x=0,y=320,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
{x=0,y=410,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
{x=0,y=520,w=200,h=60, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
{x=0,y=615,w=200,h=150, corners={ {"circle",10} },colour={ {0,0x1F1F1F,0.5} },operator="atop" } ,
}
---------------------------- PARAMETERS END HERE
local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
local cr=cairo_create(cs)
if tonumber(conky_parse("$updates"))<5 then return end
for i in pairs(boxes_settings) do
draw_box (cr,boxes_settings[i])
end
cairo_destroy(cr)
cairo_surface_destroy(cs)
end
function draw_box(cr,t)
if t.draw_me == true then t.draw_me = nil end
if t.draw_me ~= nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end
local table_corners={"circle","curve","line"}
local t_operators={
clear = CAIRO_OPERATOR_CLEAR,
source = CAIRO_OPERATOR_SOURCE,
over = CAIRO_OPERATOR_OVER,
["in"] = CAIRO_OPERATOR_IN,
out = CAIRO_OPERATOR_OUT,
atop = CAIRO_OPERATOR_ATOP,
dest = CAIRO_OPERATOR_DEST,
dest_over = CAIRO_OPERATOR_DEST_OVER,
dest_in = CAIRO_OPERATOR_DEST_IN,
dest_out = CAIRO_OPERATOR_DEST_OUT,
dest_atop = CAIRO_OPERATOR_DEST_ATOP,
xor = CAIRO_OPERATOR_XOR,
add = CAIRO_OPERATOR_ADD,
saturate = CAIRO_OPERATOR_SATURATE,
}
function rgba_to_r_g_b_a(tc)
--tc={position,colour,alpha}
local colour = tc[2]
local alpha = tc[3]
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
function table.copy(t)
local t2 = {}
for k,v in pairs(t) do
t2[k] = {v[1],v[2]}
end
return t2
end
function draw_corner(num,t)
local shape=t[1]
local radius=t[2]
local x,y = t[3],t[4]
if shape=="line" then
if num == 1 then cairo_line_to(cr,radius,0)
elseif num == 2 then cairo_line_to(cr,x,radius)
elseif num == 3 then cairo_line_to(cr,x-radius,y)
elseif num == 4 then cairo_line_to(cr,0,y-radius)
end
end
if shape=="circle" then
local PI = math.pi
if num == 1 then cairo_arc(cr,radius,radius,radius,-PI,-PI/2)
elseif num == 2 then cairo_arc(cr,x-radius,y+radius,radius,-PI/2,0)
elseif num == 3 then cairo_arc(cr,x-radius,y-radius,radius,0,PI/2)
elseif num == 4 then cairo_arc(cr,radius,y-radius,radius,PI/2,-PI)
end
end
if shape=="curve" then
if num == 1 then cairo_curve_to(cr,0,radius ,0,0 ,radius,0)
elseif num == 2 then cairo_curve_to(cr,x-radius,0, x,y, x,radius)
elseif num == 3 then cairo_curve_to(cr,x,y-radius, x,y, x-radius,y)
elseif num == 4 then cairo_curve_to(cr,radius,y, x,y, 0,y-radius)
end
end
end
--check values and set default values
if t.x == nil then t.x = 0 end
if t.y == nil then t.y = 0 end
if t.w == nil then t.w = conky_window.width end
if t.h == nil then t.h = conky_window.height end
if t.radius == nil then t.radius = 0 end
if t.border == nil then t.border = 0 end
if t.colour==nil then t.colour={{1,0xFFFFFF,0.5}} end
if t.linear_gradient ~= nil then
if #t.linear_gradient ~= 4 then
t.linear_gradient = {t.x,t.y,t.width,t.height}
end
end
if t.angle==nil then t.angle = 0 end
if t.skew_x == nil then t.skew_x=0 end
if t.skew_y == nil then t.skew_y=0 end
if t.scale_x==nil then t.scale_x=1 end
if t.scale_y==nil then t.scale_y=1 end
if t.rot_x == nil then t.rot_x=0 end
if t.rot_y == nil then t.rot_y=0 end
if t.operator == nil then t.operator = "over" end
if (t_operators[t.operator]) == nil then
print ("wrong operator :",t.operator)
t.operator = "over"
end
if t.radial_gradient ~= nil then
if #t.radial_gradient ~= 6 then
t.radial_gradient = {t.x,t.y,0, t.x,t.y, t.width}
end
end
for i=1, #t.colour do
if #t.colour[i]~=3 then
print ("error in color table")
t.colour[i]={1,0xFFFFFF,1}
end
end
if t.corners == nil then t.corners={ {"line",0} } end
local t_corners = {}
local t_corners = table.copy(t.corners)
--don't use t_corners=t.corners otherwise t.corners is altered
--complete the t_corners table if needed
for i=#t_corners+1,4 do
t_corners[i]=t_corners[#t_corners]
local flag=false
for j,v in pairs(table_corners) do flag=flag or (t_corners[i][1]==v) end
if not flag then print ("error in corners table :",t_corners[i][1]);t_corners[i][1]="curve" end
end
--this way :
-- t_corners[1][4]=x
-- t_corners[2][3]=y
--doesn't work
t_corners[1]={t_corners[1][1],t_corners[1][2],0,0}
t_corners[2]={t_corners[2][1],t_corners[2][2],t.w,0}
t_corners[3]={t_corners[3][1],t_corners[3][2],t.w,t.h}
t_corners[4]={t_corners[4][1],t_corners[4][2],0,t.h}
t.no_gradient = (t.linear_gradient == nil ) and (t.radial_gradient == nil )
cairo_save(cr)
cairo_translate(cr, t.x, t.y)
if t.rot_x~=0 or t.rot_y~=0 or t.angle~=0 then
cairo_translate(cr,t.rot_x,t.rot_y)
cairo_rotate(cr,t.angle*math.pi/180)
cairo_translate(cr,-t.rot_x,-t.rot_y)
end
if t.scale_x~=1 or t.scale_y~=1 or t.skew_x~=0 or t.skew_y~=0 then
local matrix0 = cairo_matrix_t:create()
tolua.takeownership(matrix0)
cairo_matrix_init (matrix0, t.scale_x,math.pi*t.skew_y/180 , math.pi*t.skew_x/180 ,t.scale_y,0,0)
cairo_transform(cr,matrix0)
end
local tc=t_corners
cairo_move_to(cr,tc[1][2],0)
cairo_line_to(cr,t.w-tc[2][2],0)
draw_corner(2,tc[2])
cairo_line_to(cr,t.w,t.h-tc[3][2])
draw_corner(3,tc[3])
cairo_line_to(cr,tc[4][2],t.h)
draw_corner(4,tc[4])
cairo_line_to(cr,0,tc[1][2])
draw_corner(1,tc[1])
if t.no_gradient then
cairo_set_source_rgba(cr,rgba_to_r_g_b_a(t.colour[1]))
else
if t.linear_gradient ~= nil then
pat = cairo_pattern_create_linear (t.linear_gradient[1],t.linear_gradient[2],t.linear_gradient[3],t.linear_gradient[4])
elseif t.radial_gradient ~= nil then
pat = cairo_pattern_create_radial (t.radial_gradient[1],t.radial_gradient[2],t.radial_gradient[3],
t.radial_gradient[4],t.radial_gradient[5],t.radial_gradient[6])
end
for i=1, #t.colour do
cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgba_to_r_g_b_a(t.colour[i]))
end
cairo_set_source (cr, pat)
cairo_pattern_destroy(pat)
end
cairo_set_operator(cr,t_operators[t.operator])
if t.border>0 then
cairo_close_path(cr)
if t.dash ~= nil then cairo_set_dash(cr, t.dash, 1, 0.0) end
cairo_set_line_width(cr,t.border)
cairo_stroke(cr)
else
cairo_fill(cr)
end
cairo_restore(cr)
end
textsys.lua:
--[[TEXT WIDGET v1.42 by Wlourf 07 Feb. 2011
This widget can drawn texts set in the "text_settings" table with some parameters
http://u-scripts.blogspot.com/2010/06/text-widget.html
To call the script in a conky, use, before TEXT
lua_load /path/to/the/script/graph.lua
lua_draw_hook_pre main_graph
and add one line (blank or not) after TEXT
The parameters (all optionals) are :
text - text to display, default = "Conky is good for you"
it can be used with conky variables, i.e. text="my cpu1 is ${cpu cpu1} %")
- coordinates below are relative to top left corner of the conky window
x - x coordinate of first letter (bottom-left), default = center of conky window
y - y coordinate of first letter (bottom-left), default = center of conky window
h_align - horizontal alignement of text relative to point (x,y), default="l"
available values are "l": left, "c" : center, "r" : right
v_align - vertical alignment of text relative to point (x,y), default="b"
available values "t" : top, "m" : middle, "b" : bottom
font_name - name of font to use, default = Free Sans
font_size - size of font to use, default = 14
italic - display text in italic (true/false), default=false
oblique - display text in oblique (true/false), default=false (I don' see the difference with italic!)
bold - display text in bold (true/false), default=false
angle - rotation of text in degrees, default = 0 (horizontal)
colour - table of colours for text, default = plain white {{1,0xFFFFFF,1}}
this table contains one or more tables with format {P,C,A}
P=position of gradient (0 = beginning of text, 1= end of text)
C=hexadecimal colour
A=alpha (opacity) of color (0=invisible,1=opacity 100%)
Examples :
for a plain color {{1,0x00FF00,0.5}}
for a gradient with two colours {{0,0x00FF00,0.5},{1,0x000033,1}}
or {{0.5,0x00FF00,1},{1,0x000033,1}} -with this one, gradient will start in the middle of the text
for a gradient with three colours {{0,0x00FF00,0.5},{0.5,0x000033,1},{1,0x440033,1}}
and so on ...
orientation - in case of gradient, "orientation" defines the starting point of the gradient, default="ww"
there are 8 available starting points : "nw","nn","ne","ee","se","ss","sw","ww"
(n for north, w for west ...)
theses 8 points are the 4 corners + the 4 middles of text's outline
so a gradient "nn" will go from "nn" to "ss" (top to bottom, parallele to text)
a gradient "nw" will go from "nw" to "se" (left-top corner to right-bottom corner)
radial - define a radial gradient (if present at the same time as "orientation", "orientation" will have no effect)
this parameter is a table with 6 numbers : {xa,ya,ra,xb,yb,rb}
they define two circle for the gradient :
xa, ya, xb and yb are relative to x and y values above
reflection_alpha - add a reflection effect (values from 0 to 1) default = 0 = no reflection
other values = starting opacity
reflection_scale - scale of the reflection (default = 1 = height of text)
reflection_length - length of reflection, define where the opacity will be set to zero
calues from 0 to 1, default =1
skew_x,skew_y - skew text around x or y axis
draw_me - if set to false, text is not drawn (default = true or 1)
it can be used with a conky string, if the string returns 1, the text is drawn :
example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",
v1.0 07/06/2010, Original release
v1.1 10/06/2010 Add "orientation" parameter
v1.2 15/06/2010 Add "h_align", "v_align" and "radial" parameters
v1.3 25/06/2010 Add "reflection_alpha", "reflection_length", "reflection_scale",
"skew_x" et "skew_y"
v1.4 07/01/2011 Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness"
text is parsed inside the function, not in the array of settings
v1.41 26/01/2011 Correct bug for h_align="c"
v1.42 09/02/2011 Correct bug for orientation="ee"
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation version 3 (GPLv3)
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-- MA 02110-1301, USA.
]]
require 'cairo'
function conky_draw_text()
--BEGIN OF PARAMETRES
local ts=os.date("*t")
local text_settings={
--sda1
{
text=conky_parse("home: "),
font_name="Hack",
font_size=10,
bold=true,
x=7,
y=100,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
},
{
text=conky_parse("${fs_used_perc /home}% / ${fs_size /}"),
font_name="Hack",
font_size=10,
bold=true,
x=190,
y=100,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
--======================================================================
--==TIME==--
{
text=conky_parse("${time %H:%M}"),
font_name="Zero Twos",
font_size=80,
bold=true,
x=7,
y=70,
--reflection_alpha=0.7,
--reflection_length=0.7,
colour={{0,0x3D3DFD,1},{1,0xD04BFF,1}},
radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("sda3:"),
font_name="Hack",
font_size=10,
bold=true,
x=7,
y=120,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("${fs_used_perc /media/stock2}% / ${fs_size /media/stock2}"),
font_name="Hack",
font_size=10,
bold=true,
x=190,
y=120,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
--sdb1
{
text=conky_parse("sdb1:"),
font_name="Hack",
font_size=10,
bold=true,
x=7,
y=140,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("${fs_used_perc /media/raphix/share}% / ${fs_size /media/raphix/share}"),
font_name="Hack",
font_size=10,
bold=true,
x=190,
y=140,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
--sdb3
{
text=conky_parse("sdb3:"),
font_name="Hack",
font_size=10,
bold=true,
x=7,
y=160,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("${fs_used_perc /media/raphix/stock}% / ${fs_size /media/raphix/stock}"),
font_name="Hack",
font_size=10,
bold=true,
x=190,
y=160,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
--cpu
{
text=conky_parse("${cpu}%"),
font_name="Hack",
font_size=10,
bold=true,
x=190,
y=180,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("cpu:"),
font_name="Hack",
font_size=10,
bold=true,
x=7,
y=180,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
--temp: ${hwmon 0 temp 1}°
{
text=conky_parse("${hwmon 0 temp 1}°"),
font_name="Hack",
font_size=10,
bold=true,
x=235,
y=180,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("$memperc% $mem/$memmax"),
font_name="Hack",
font_size=10,
bold=true,
x=170,
y=200,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
{
text=conky_parse("ram:"),
font_name="Hack",
font_size=10,
bold=true,
x=7,
y=200,
--reflection_alpha=0.9,
--reflection_length=0.7,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
--radial={0,-550,500,00,-4995,5000},
},
---Down_up
{
text='dl|ul',
y=230,
x=120,
font_name="Hack",
font_size=12,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
{
text=conky_parse('${downspeed eth0} / ${totaldown eth0}'),
y=230,
x=7,
font_name="Hack",
font_size=7,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
{
text=conky_parse('${upspeed eth0} / ${totalup eth0}'),
y=230,
x=210,
font_name="Hack",
font_size=7,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
{
text=conky_parse("topcpu:"),
y=243,
x=7,
font_name="Hack",
font_size=8,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
{
text=conky_parse("topram:"),
y=253,
x=7,
font_name="Hack",
font_size=8,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
{
text=conky_parse("${top name 1}${top cpu 1}%"),
y=243,
x=160,
font_name="Hack",
font_size=8,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
{
text=conky_parse("${top_mem name 1}${top_mem mem 1}%"),
y=253,
x=160,
font_name="Hack",
font_size=8,
bold=true,
colour={{0,0x3D3DFD,0.7},{0.5,0x7474B6,1},{1,0x5656EA,0.7}},
orientation="nn",
--reflection_alpha=0.9,
--reflection_length=0.7,
},
}
--------------END OF PARAMETERES----------------
if conky_window == nil then return end
if tonumber(conky_parse("$updates"))<3 then return end
local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
for i,v in pairs(text_settings) do
cr = cairo_create (cs)
display_text(v)
cairo_destroy(cr)
cr = nil
end
cairo_surface_destroy(cs)
end
function rgb_to_r_g_b2(tcolour)
local colour,alpha=tcolour[2],tcolour[3]
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
function display_text(t)
if t.draw_me==true then t.draw_me = nil end
if t.draw_me~=nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end
local function set_pattern(te)
--this function set the pattern
if #t.colour==1 then
cairo_set_source_rgba(cr,rgb_to_r_g_b2(t.colour[1]))
else
local pat
if t.radial==nil then
local pts=linear_orientation(t,te)
pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
else
pat = cairo_pattern_create_radial (t.radial[1],t.radial[2],t.radial[3],t.radial[4],t.radial[5],t.radial[6])
end
for i=1, #t.colour do
cairo_pattern_add_color_stop_rgba (pat, t.colour[i][1], rgb_to_r_g_b2(t.colour[i]))
end
cairo_set_source (cr, pat)
cairo_pattern_destroy(pat)
end
end
--set default values if needed
if t.text==nil then t.text="Conky is good for you !" end
if t.x==nil then t.x = conky_window.width/2 end
if t.y==nil then t.y = conky_window.height/2 end
if t.colour==nil then t.colour={{1,0xFFFFFF,1}} end
if t.font_name==nil then t.font_name="Arial" end
if t.font_size==nil then t.font_size=14 end
if t.angle==nil then t.angle=0 end
if t.italic==nil then t.italic=false end
if t.oblique==nil then t.oblique=false end
if t.bold==nil then t.bold=false end
if t.radial ~= nil then
if #t.radial~=6 then
print ("error in radial table")
t.radial=nil
end
end
if t.orientation==nil then t.orientation="ww" end
if t.h_align==nil then t.h_align="l" end
if t.v_align==nil then t.v_align="b" end
if t.reflection_alpha == nil then t.reflection_alpha=0 end
if t.reflection_length == nil then t.reflection_length=1 end
if t.reflection_scale == nil then t.reflection_scale=1 end
if t.skew_x==nil then t.skew_x=0 end
if t.skew_y==nil then t.skew_y=0 end
cairo_translate(cr,t.x,t.y)
cairo_rotate(cr,t.angle*math.pi/180)
cairo_save(cr)
local slant = CAIRO_FONT_SLANT_NORMAL
local weight = CAIRO_FONT_WEIGHT_NORMAL
if t.italic then slant = CAIRO_FONT_SLANT_ITALIC end
if t.oblique then slant = CAIRO_FONT_SLANT_OBLIQUE end
if t.bold then weight = CAIRO_FONT_WEIGHT_BOLD end
cairo_select_font_face(cr, t.font_name, slant,weight)
for i=1, #t.colour do
if #t.colour[i]~=3 then
print ("error in color table")
t.colour[i]={1,0xFFFFFF,1}
end
end
local matrix0 = cairo_matrix_t:create()
tolua.takeownership(matrix0)
local skew_x,skew_y=t.skew_x/t.font_size,t.skew_y/t.font_size
cairo_matrix_init (matrix0, 1,skew_y,skew_x,1,0,0)
cairo_transform(cr,matrix0)
cairo_set_font_size(cr,t.font_size)
local te=cairo_text_extents_t:create()
tolua.takeownership(te)
local text=conky_parse(t.text)
if text~="" then t.text = text end
cairo_text_extents (cr,t.text,te)
set_pattern(te)
local mx,my=0,0
if t.h_align=="c" then
mx=-te.width/2-te.x_bearing
elseif t.h_align=="r" then
mx=-te.width
end
if t.v_align=="m" then
my=-te.height/2-te.y_bearing
elseif t.v_align=="t" then
my=-te.y_bearing
end
cairo_move_to(cr,mx,my)
cairo_show_text(cr,t.text)
if t.reflection_alpha ~= 0 then
local matrix1 = cairo_matrix_t:create()
tolua.takeownership(matrix1)
cairo_set_font_size(cr,t.font_size)
cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(te.height+te.y_bearing+my)*(1+t.reflection_scale))
cairo_set_font_size(cr,t.font_size)
te=nil
local te=cairo_text_extents_t:create()
tolua.takeownership(te)
cairo_text_extents (cr,t.text,te)
cairo_transform(cr,matrix1)
set_pattern(te)
cairo_move_to(cr,mx,my)
cairo_show_text(cr,t.text)
local pat2 = cairo_pattern_create_linear (0,
(te.y_bearing+te.height+my),
0,
te.y_bearing+my)
cairo_pattern_add_color_stop_rgba (pat2, 0,1,0,0,1-t.reflection_alpha)
cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)
--line is not drawn but with a size of zero, the mask won't be nice
cairo_set_line_width(cr,1)
local dy=te.x_bearing
if dy<0 then dy=dy*(-1) end
cairo_rectangle(cr,mx+te.x_bearing,te.y_bearing+te.height+my,te.width+dy,-te.height*1.05)
cairo_clip_preserve(cr)
cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
--cairo_stroke(cr)
cairo_mask(cr,pat2)
cairo_pattern_destroy(pat2)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
te=nil
end
end
function linear_orientation(t,te)
local w,h=te.width,te.height
local xb,yb=te.x_bearing,te.y_bearing
if t.h_align=="c" then
xb=xb-w/2
elseif t.h_align=="r" then
xb=xb-w
end
if t.v_align=="m" then
yb=-h/2
elseif t.v_align=="t" then
yb=0
end
local p=0
if t.orientation=="nn" then
p={xb+w/2,yb,xb+w/2,yb+h}
elseif t.orientation=="ne" then
p={xb+w,yb,xb,yb+h}
elseif t.orientation=="ww" then
p={xb,h/2,xb+w,h/2}
elseif vorientation=="se" then
p={xb+w,yb+h,xb,yb}
elseif t.orientation=="ss" then
p={xb+w/2,yb+h,xb+w/2,yb}
elseif t.orientation=="ee" then
p={xb+w,h/2,xb,h/2}
elseif t.orientation=="sw" then
p={xb,yb+h,xb+w,yb}
elseif t.orientation=="nw" then
p={xb,yb,xb+w,yb+h}
end
return p
end
netgraph.lua:
--[[ GRAPH widget v1.1 by wlourf (07.01.2011)
this widget draws some graphs with some effects
http://u-scripts.blogspot.com/2010/10/graph-widget.html
To call the script in a conky, use, before TEXT
lua_load /path/to/the/script/graph.lua
lua_draw_hook_pre main_graph
and add one line (blank or not) after TEXT
Parameters are :
3 parameters are mandatory
name - the name of the conky variable to display,
for example for {$cpu cpu0}, just write name="cpu"
arg - the argument of the above variable,
for example for {$cpu cpu1}, just write arg="cpu1"
arg can be a numerical value if name=""
max - the maximum value the above variable can reach,
for example for {$cpu cpu1}, just write max=100 or less or more
Optional parameters:
x,y - coordinates of the bottom-left corner of the graph,
relative to the top-left corner of the conky window
default = bottom-left corner of the conky window
width - width of the graph, default = 100 pixels
height - height of the graph, default = 20 pixels
nb_values - number of values to display in the graph, default=width
i.e. 1 pixel for 1 value
autoscale - if set to true, calculate the max valeu of the y axis and
doesn't use the max parameter above, default=false
skew_x - skew graph around x axis, défaut = 0
skew_y - skew graph around y axis, défaut = 0
angle - angle of rotation of the graph in degress, default = 0
i.e. a horizontal graph)
inverse - if set to true, graph are draw from right to left, default=false
background - if set to false, background is not drawn, default=true
foreground - if set to false, foreground is not drawn, default=true
foreground = plain graph
bg_bd_size - size of the border of the background, default=0=no border
fg_bd_size - size of the border of the foreground, default=0=no border
Colours tables below are defined into braces :
{position in the gradient (0 to 1), colour in hexadecimal, alpha (0 to 1)}
example for a single colour table :
{{0,0xFFAA00,1}} position parameter doesn't matter
example for a two-colours table :
{{0,0xFFAA00,1},{1,0x00AA00,1}} or {{0.5,0xFFAA00,1},{1,0x00AA00,1}}
example for a three-colours table :
{{0,0xFFAA00,1},{0.5,0xFF0000,1},{1,0x00AA00,1}}
bg_colour - colour table for background,
default = {{0,0x000000,.5},{1,0xFFFFFF,.5}}
fg_colour - colour table for foreground,
default = {{0,0x00FFFF,1},{1,0x0000FF,1}}
bg_bd_colour- colour table for background border,
default = {{1,0xFFFFFF,1}}
fg_bd_colour- colour table for foreground border,
default = {{1,0xFFFF00,1}}
bg_orientation, bg_bd_orientation, fg_orientation, fg_bd_orientation,
- "orientation" defines the starting point of the gradient,
default="nn"
there are 8 available starting points :
"nw","nn","ne","ee","se","ss","sw","ww"
(n for north, w for west ...)
theses 8 points are the 4 corners + the 4 middles of graph
so a gradient "nn" will go from "nn" to "ss"
a gradient "nw" will go from "nw" to "se"
draw_me - if set to false, graph is not drawn (default = true)
it can be used with a conky string, if the string returns 1, the graph is drawn :
example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",
v1.0 (31/10/2010) original release
v1.1 (07/01/2011) Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness"
text is parsed inside the function, not in the array of settings
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation version 3 (GPLv3)
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-- MA 02110-1301, USA.
]]
require 'cairo'
function set_settings()
graph_settings={
--[[background {
name="",
arg=0,
max=1,
x=0,
y=38,
width=1920,
height=40,
foreground=false,
bg_colour=col_bg,
},]]----test
--##left cpu graphes##--
---bleu
{
name="upspeedf",
arg="eth0",
max=100,
y=230,
x=160,
autoscale=true,
inverse=true,
width=40,
height=10,
nb_values=50,
background=false,
fg_bd_size=.5,
foreground=false,
--fg_colour={{0.5,0xFFAA00,1},{1,0x00AA00,1}},
fg_bd_colour = { {0.5,0xD04BFF,1},{.75,0x3D3DFD,1},
},
},
--violet
{
name="downspeedf",
arg="eth0",
max=100,
y=230,
x=73,
autoscale=true,
--inverse=true,
width=40,
height=10,
nb_values=50,
background=false,
fg_bd_size=.5,
foreground=false,
--fg_colour={{0.5,0xFFAA00,1},{1,0x00AA00,1}},
fg_bd_colour = { {0.5,0xD04BFF,1},{.75,0x3D3DFD,1},
},
},
--##right cpu graphes##--
{
name="cpu",
arg="cpu1",
max=100,
y=255,
x=45,
autoscale=true,
inverse=true,
width=105,
height=20,
nb_values=100,
background=false,
fg_bd_size=.7,
foreground=false,
--fg_colour={{0.5,0xFFAA00,1},{1,0x00AA00,1}},
fg_bd_colour = { {0.5,0xD04BFF,1},{.75,0x3D3DFD,1},
},
},
--[[{
name="memperc",
arg="%S",
max=100,
y=255,
x=45,
autoscale=true,
inverse=true,
width=105,
height=10,
nb_values=55,
background=false,
fg_bd_size=.5,
foreground=false,
--fg_colour={{0.5,0xFFAA00,1},{1,0x00AA00,1}},
fg_bd_colour = { {0.5,0xD04BFF,1},{.75,0x3D3DFD,1},
},
},
{
name="cpu",
arg="cpu",
max=100,
y=50,
x=1010,
autoscale=true,
width=200,
height=20,
nb_values=200,
--angle=180,
inverse=true,
background=false,
fg_bd_size=1.5,
foreground=false,
--fg_colour={{0.5,0xFF1A00,1},{1,0x01AA00,1}},
fg_bd_colour = { {0.5,0x00EE00,1},{.75,0x008B00,1},
},
},--]]
}
end
---END OF PARAMETERS ---
function check_settings(t)
--tables are check only when conky start
if t.name==nil and t.arg==nil then
print ("No input values ... use parameters 'name'" ..
" with 'arg' or only parameter 'arg' ")
return 1
end
if t.max==nil then
print ("No maximum value defined, use 'max'")
print ("for name=" .. t.name .. " with arg=" .. t.arg)
return 1
end
if t.name==nil then t.name="" end
if t.arg==nil then t.arg="" end
return 0
end
function conky_main_graph()
if conky_window == nil then return end
local w=conky_window.width
local h=conky_window.height
local cs=cairo_xlib_surface_create(conky_window.display,
conky_window.drawable, conky_window.visual, w, h)
cr=cairo_create(cs)
updates=tonumber(conky_parse('${updates}'))
--start drawing after "updates_gap" updates
--prevent segmentation error for cpu
updates_gap=5
if updates==1 then
set_settings()
flagOK=0
for i in pairs(graph_settings) do
if graph_settings[i].width==nil then graph_settings[i].width=100 end
if graph_settings[i].nb_values==nil then
graph_settings[i].nb_values= graph_settings[i].width
end
--create an empty table to store values
graph_settings[i]["values"]={}
--beginning point
graph_settings[i].beg = graph_settings[i].nb_values
--graph_settings[i].beg = 0
for j =1, graph_settings[i].nb_values do
graph_settings[i].values[j]=0
end
graph_settings[i].flag_init=true
flagOK=flagOK + check_settings(graph_settings[i])
end
end
if flagOK>0 then
--abort script if error in one of the tables
print ("ERROR : Check the graph_setting table")
return
end
--drawing process
if updates > updates_gap then
for i in pairs(graph_settings) do
if graph_settings[i].draw_me==true then graph_settings[i].draw_me = nil end
if (graph_settings[i].draw_me==nil or conky_parse(tostring(graph_settings[i].draw_me)) == "1") then
local nb_values=graph_settings[i].nb_values
graph_settings[i].automax=0
for j =1, nb_values do
if graph_settings[i].values[j+1]==nil then
graph_settings[i].values[j+1]=0
end
graph_settings[i].values[j]=graph_settings[i].values[j+1]
if j==nb_values then
--store value
if graph_settings[i].name=="" then
value=graph_settings[i].arg
else
value=tonumber(conky_parse('${' ..
graph_settings[i].name .. " " ..
graph_settings[i].arg ..'}'))
end
if value==nil then
graph_settings[i].values[nb_values]=0
else
graph_settings[i].values[nb_values]=value
end
end
graph_settings[i].automax=math.max(graph_settings[i].automax,
graph_settings[i].values[j])
--should stop weird glitches at beginning when no values reported yet for upspeed or diskio
if graph_settings[i].automax == 0 then graph_settings[i].automax = 1 end
end
draw_graph(graph_settings[i])
end
end
end
cairo_destroy(cr)
cairo_surface_destroy(cs)
updates=nil
updates_gap=nil
end
function draw_graph(t)
--drawing function
local function rgb_to_r_g_b(colour)
return ((colour[2] / 0x10000) % 0x100) / 255., ((colour[2] / 0x100) % 0x100) / 255., (colour[2] % 0x100) / 255., colour[3]
end
local function linear_orientation(o,w,h)
--set gradient for bg and bg border
local p
if o=="nn" then
p={w/2,h,w/2,0}
elseif o=="ne" then
p={w,h,0,0}
elseif o=="ww" then
p={0,h/2,w,h/2}
elseif o=="se" then
p={w,0,0,h}
elseif o=="ss" then
p={w/2,0,w/2,h}
elseif o=="ee" then
p={w,h/2,0,h/2}
elseif o=="sw" then
p={0,0,w,h}
elseif o=="nw" then
p={0,h,w,0}
end
return p
end
local function linear_orientation_inv(o,w,h)
--set gradient for fg and fg border
local p
if o=="ss" then
p={w/2,h,w/2,0}
elseif o=="sw" then
p={w,h,0,0}
elseif o=="ee" then
p={0,h/2,w,h/2}
elseif o=="nw" then
p={w,0,0,h}
elseif o=="nn" then
p={w/2,0,w/2,h}
elseif o=="ww" then
p={w,h/2,0,h/2}
elseif o=="ne" then
p={0,0,w,h}
elseif o=="se" then
p={0,h,w,0}
end
return p
end
--set default values
--cancel drawing if not needed
if t.draw_me~=nil and conky_parse(tostring(t.draw_me)) ~= "1" then
return
end
if t.height==nil then t.height=20 end
--checked in previous part : width and nb_values
if t.background==nil then t.background=true end
if t.bg_bd_size==nil then t.bg_bd_size=0 end
if t.x==nil then t.x=t.bg_bd_size end
if t.y==nil then t.y=conky_window.height -t.bg_bd_size end
if t.bg_colour==nil then t.bg_colour={{0,0x000000,.5},{1,0xFFFFFF,.5}} end
if t.bg_bd_colour==nil then t.bg_bd_colour={{1,0xFFFFFF,1}} end
if t.foreground==nil then t.foreground=true end
if t.fg_colour==nil then t.fg_colour={{0,0x00FFFF,1},{1,0x0000FF,1}} end
if t.fg_bd_size==nil then t.fg_bd_size=0 end
if t.fg_bd_colour==nil then t.fg_bd_colour={{1,0xFFFF00,1}} end
if t.autoscale==nil then t.autoscale=false end
if t.inverse==nil then t.inverse=false end
if t.angle==nil then t.angle=0 end
if t.bg_bd_orientation==nil then t.bg_bd_orientation="nn" end
if t.bg_orientation==nil then t.bg_orientation="nn" end
if t.fg_bd_orientation==nil then t.fg_bd_orientation="nn" end
if t.fg_orientation==nil then t.fg_orientation="nn" end
--check colours tables
for i=1, #t.fg_colour do
if #t.fg_colour[i]~=3 then
print ("error in fg_colour table")
t.fg_colour[i]={1,0x0000FF,1}
end
end
for i=1, #t.fg_bd_colour do
if #t.fg_bd_colour[i]~=3 then
print ("error in fg_bd_colour table")
t.fg_bd_colour[i]={1,0x00FF00,1}
end
end
for i=1, #t.bg_colour do
if #t.bg_colour[i]~=3 then
print ("error in background color table")
t.bg_colour[i]={1,0xFFFFFF,0.5}
end
end
for i=1, #t.bg_bd_colour do
if #t.bg_bd_colour[i]~=3 then
print ("error in background border color table")
t.bg_bd_colour[i]={1,0xFFFFFF,1}
end
end
--calculate skew parameters if needed
if t.flag_init then
if t.skew_x == nil then
t.skew_x=0
else
t.skew_x = math.pi*t.skew_x/180
end
if t.skew_y == nil then
t.skew_y=0
else
t.skew_y = math.pi*t.skew_y/180
end
t.flag_init=false
end
cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
cairo_set_line_join(cr,CAIRO_LINE_JOIN_ROUND)
local matrix0 = cairo_matrix_t:create()
tolua.takeownership(matrix0)
cairo_save(cr)
cairo_matrix_init (matrix0, 1,t.skew_y,t.skew_x,1,0,0)
cairo_transform(cr,matrix0)
local ratio=t.width/t.nb_values
cairo_translate(cr,t.x,t.y)
cairo_rotate(cr,t.angle*math.pi/180)
cairo_scale(cr,1,-1)
--background
if t.background then
local pts=linear_orientation(t.bg_orientation,t.width,t.height)
local pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
for i=1, #t.bg_colour do
--print ("i",i,t.colour[i][1], rgb_to_r_g_b(t.colour[i]))
cairo_pattern_add_color_stop_rgba (pat, t.bg_colour[i][1], rgb_to_r_g_b(t.bg_colour[i]))
end
cairo_set_source (cr, pat)
cairo_rectangle(cr,0,0,t.width,t.height)
cairo_fill(cr)
cairo_pattern_destroy(pat)
end
--autoscale
cairo_save(cr)
if t.autoscale then
t.max= t.automax*1.1
end
local scale_x = t.width/(t.nb_values-1)
local scale_y = t.height/t.max
--define first point of the graph
if updates-updates_gap <t.nb_values then
t.beg = t.beg - 1
--next line prevent segmentation error when conky window is redraw
--quicly when another window "fly" over it
if t.beg<0 then t.beg=0 end
else
t.beg=0
end
if t.inverse then cairo_scale(cr,-1,1)
cairo_translate(cr,-t.width,0) end
--graph foreground
if t.foreground then
local pts_fg=linear_orientation_inv(t.fg_orientation,t.width,t.height)
local pat = cairo_pattern_create_linear (pts_fg[1],pts_fg[2],pts_fg[3],pts_fg[4])
for i=1,#t.fg_colour,1 do
cairo_pattern_add_color_stop_rgba (pat, 1-t.fg_colour[i][1], rgb_to_r_g_b(t.fg_colour[i]))
end
cairo_set_source (cr, pat)
cairo_move_to(cr,t.beg*scale_x,0)
cairo_line_to(cr,t.beg*scale_x,t.values[t.beg+1]*scale_y)
for i=t.beg, t.nb_values-1 do
cairo_line_to(cr,i*scale_x,t.values[i+1]*scale_y)
end
cairo_line_to(cr,(t.nb_values-1)*scale_x,0)
cairo_close_path(cr)
cairo_fill(cr)
cairo_pattern_destroy(pat)
end
--graph_border
if t.fg_bd_size>0 then
local pts=linear_orientation_inv(t.fg_bd_orientation,t.width,t.height)
local pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
for i=1,#t.fg_bd_colour,1 do
cairo_pattern_add_color_stop_rgba (pat, 1-t.fg_bd_colour[i][1], rgb_to_r_g_b(t.fg_bd_colour[i]))
end
cairo_set_source (cr, pat)
cairo_move_to(cr,t.beg*scale_x,t.values[t.beg+1]*scale_y)
for i=t.beg, t.nb_values-1 do
cairo_line_to(cr,i*scale_x,t.values[i+1]*scale_y)
end
cairo_set_line_width(cr,t.fg_bd_size)
cairo_stroke(cr)
cairo_pattern_destroy(pat)
end
cairo_restore(cr)
--background border
if t.bg_bd_size>0 then
local pts=linear_orientation(t.bg_bd_orientation,t.width,t.height)
local pat = cairo_pattern_create_linear (pts[1],pts[2],pts[3],pts[4])
for i=1, #t.bg_bd_colour do
--print ("i",i,t.colour[i][1], rgb_to_r_g_b(t.colour[i]))
cairo_pattern_add_color_stop_rgba (pat, t.bg_bd_colour[i][1], rgb_to_r_g_b(t.bg_bd_colour[i]))
end
cairo_set_source (cr, pat)
cairo_rectangle(cr,0,0,t.width,t.height)
cairo_set_line_width(cr,t.bg_bd_size)
cairo_stroke(cr)
cairo_pattern_destroy(pat)
end
cairo_restore(cr)
end
RE-EDITED I hope it's ok... if not I will restart posting from 0...
Sorry...
Last edited by ragamatrix (2016-06-10 13:13:38)
Offline