#751 Le 21/06/2011, à 06:51
- usm77
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut à tous
Je suis depuis pas mal de temps ce forum sans intervenir, mais en piochant de ci delà des scripts afin de faire le mien.
Je vous donne le résultat, je le trouve correct à mon humble avis
J'ai deux écrans
Celui de droite qui contient les conky
Uploaded with ImageShack.us
Voici mon script pour la météo. Seulement la partie TEXT pour pacbits
.conky_meteo
TEXT
${offset -5}${color3}${font Ubuntu:style=CleanCut:size=10} ${voffset -2}${font Ubuntu:style=Bold:size=11}Météo${font} ${hr}${color1}
${color3}Prévisions:${color1}
${execpi 1800 conkyForecast --location=FRIF0610 --template=$HOME/conky/conkyForecast.template}
Le template 'conkyForecast.template'
${color yellow}${voffset 5}${goto 10}${font ConkyWeather:style=Bold:size=40}[--datatype=WF]${font}
${voffset 5}${goto 20}[--datatype=HT --hideunits --centeredwidth=3 --startday=0]/[--datatype=LT --hideunits --centeredwidth=3]
${voffset 10}${goto 10}${font ConkyWindNESW:size=40}[--datatype=BS]${font}
${voffset 5}${goto 10}[--datatype=WS --imperial] - [--datatype=WD]
${voffset -145}${goto 100}${color1}${font Bitstream Vera Sans Mono:style=Bold:size=14}[--datatype=CT]${font}
# datatype OB=Station / CN=Ville
${font Bitstream Vera Sans Mono:style=Bold:size=9}${voffset 10}${goto 100}${color3}Ville : $alignr${color1}[--datatype=CN]
${goto 100}${color3}Précipitations : $alignr${color1}[--datatype=PC --startday=0]
${goto 100}${color3}UV : $alignr${color1}[--datatype=UI] - [--datatype=UT]
${goto 100}${color3}Humidité : $alignr${color1}[--datatype=HM]
${goto 100}${color3}Point de rosée : $alignr${color1}[--datatype=DP]
${goto 100}${color3}Lever/Coucher : $alignr${color1}[--datatype=SR] / [--datatype=SS]
${goto 100}${color3}Pression : $alignr${color1}[--datatype=BR] - [--datatype=BD]
${goto 100}${color3}Lune : $alignr${color1}[--datatype=MP]
${voffset 25}${goto 25}[--datatype=DW --startday=1 --shortweekday]${goto 100}[--datatype=DW --startday=2 --shortweekday]${goto 175}[--datatype=DW --startday=3 --shortweekday]${goto 250}[--datatype=DW --startday=4 --shortweekday]
${color yellow}${voffset 10}${goto 10}${font ConkyWeather:size=32}[--datatype=WF --startday=1 --endday=4 --spaces=3]${font}
${voffset 15}${goto 15}[--datatype=HT --startday=1 --hideunits --centeredwidth=3]/[--datatype=LT --startday=1 --hideunits --centeredwidth=3]${goto 90}[--datatype=HT --startday=2 --hideunits --centeredwidth=3]/[--datatype=LT --startday=2 --hideunits --centeredwidth=3]${goto 170}[--datatype=HT --startday=3 --hideunits --centeredwidth=3]/[--datatype=LT --startday=3 --hideunits --centeredwidth=3]${goto 245}[--datatype=HT --startday=4 --hideunits --centeredwidth=3]/[--datatype=LT --startday=4 --hideunits --centeredwidth=3]
${color3}${font Bitstream Vera Sans Mono:style=bold:size=9}${alignr 10}Dernière mise à jour: [--datatype=LU]${font}
Dernière modification par usm77 (Le 21/06/2011, à 07:07)
Hors ligne
#752 Le 21/06/2011, à 09:14
- pacbits
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonjour a tous...
@pacbits : Afin de ne pas mourir idiot,...est-ce que tu sais m'expliquer a quoi servent les mesures en dBmV sur ton Conky ? c'est la première fois que je vois ça dans un conky...
deuxième petite question, est-ce que les données recueillies sur meteo.com te renvoient une valeur chiffrée??
(je voudrais me lancer dans la création d'un thermomètre-baromètre sous forme d'aiguille avec un lua, mais je n'ai pas encore trouvé comment extraire les données via conkyforecast...et peut-être que ce serait plus simple via le script meteo2.sh que tu mentionnes pour récupérer la valeur T° et Pression)@tous : ci-dessous un screen de mes conky's adaptés...pour résoudre le problème de positionnement des conky j'ai finalement scindé la partie network et la partie system... mais je n'ai pas encore trouvé comment determiner les valeurs uploadspeed max et downloadspeed max afin de les intégrer dans le code lua...
Yep salut shamen456.
Oui bien-sûr, pas de problème pour l'explication.
Les données proviennent de l'adresse 192.168.100.1, c'est-à-dire de mon modem - Scientific Atlanta, Cisco EPC2203 - connecté au réseau via un câble coaxiale.
DbmV - décibel millivolt, ou plus fréquemment Vrms - Root Mean Square(Valeur efficace), indique le gain transmission / réception entre le client et le fournisseur d'accès(serveur). Par ailleurs dans ce cas on ne parle plus de download / upload mais de downstream / upstream.
Le valeur efficace du downstream se site entre -15 et +15 DbmV. Quant à l'upstream il semble qu'en Belgique elle doit se situer au plus près de +40 DbmV, une autre source m'indique entre +30 et +58 DbmV.
Vous devinez maintenant l'utilité des données. Elles m'indiquent l'état de ma connexion entre moi et mon fournisseur.
En ce qui concerne la météo sur conky, effectivement j'importe les données depuis weather.com.
Si nous regardons meteo.sh et meteo2.sh, ont y observe que les données recueillies sont écrite dans un fichier texte situer dans le répertoire tmp.
/tmp/conky_meteo.txt
Ville : Namur, Belgium
Température aujourd'hui : 17°C
Conditions aujourd'hui : Cloudy
Vent aujourd'hui : 19 km/h
Température demain : de 13°C à 18°C
Conditions demain : PM Light Rain
Lever du soleil : 5:29 AM
Coucher du soleil : 9:56 PM
Il s'agit effectivement de valeur chiffrée.
Cependant, selon moi, si il a du code à écrire pour extraire des informations tels que l'humidité et la pression atmosphérique, alors ça concerne le fichier xlst.
~/.conky/meteo.xlst
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="text" disable-output-escaping="yes"/>
<xsl:template match="weather">
<xsl:text>Ville : </xsl:text><xsl:value-of select="/weather/loc/dnam"/>
<xsl:apply-templates select="cc"/>
<xsl:apply-templates select="dayf/day[@d='1']"/>
<xsl:text>
Lever du soleil : </xsl:text><xsl:value-of select="/weather/loc/sunr"/>
<xsl:text>
Coucher du soleil : </xsl:text><xsl:value-of select="/weather/loc/suns"/>
</xsl:template>
<xsl:template match="cc">
<xsl:text>
Température aujourd'hui : </xsl:text><xsl:value-of select="tmp"/>°<xsl:value-of select="/weather/head/ut"/>
<xsl:if test="tmp != flik">
<xsl:text> (</xsl:text>
<xsl:value-of select="flik"/>°<xsl:value-of select="/weather/head/ut"/>
<xsl:text> ressenti)</xsl:text>
</xsl:if>
<xsl:text>
Conditions aujourd'hui : </xsl:text><xsl:value-of select="t"/>
<xsl:text>
Vent aujourd'hui : </xsl:text>
<xsl:choose>
<xsl:when test="wind/s = 'calm'"><xsl:text>0</xsl:text></xsl:when>
<xsl:otherwise><xsl:value-of select="wind/s"/></xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
<xsl:value-of select="/weather/head/us"/>
</xsl:template>
<xsl:template match="dayf/day[@d='1']">
<xsl:text>
Température demain : de </xsl:text><xsl:value-of select="low"/>°<xsl:value-of select="/weather/head/ut"/>
<xsl:text> à </xsl:text><xsl:value-of select="hi"/>°<xsl:value-of select="/weather/head/ut"/>
<xsl:text>
Conditions demain : </xsl:text><xsl:value-of select="part[@p='d']/t"/>
</xsl:template>
</xsl:stylesheet>
Je tenterais prochainement plusieurs expériences pour importer humidité et pression atmosphérique car je suis vraiment pas satisfait des données figurant sur mon conky météo. Cependant, je suis un prosélyte dans le domaine du codage/programmation, donc si quelqu'un possède du bon code : partager sans modération !
Voilà voilà...
Hors ligne
#753 Le 21/06/2011, à 09:20
- pacbits
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonjour a tous...
@pacbits : Afin de ne pas mourir idiot,...est-ce que tu sais m'expliquer a quoi servent les mesures en dBmV sur ton Conky ? c'est la première fois que je vois ça dans un conky...
deuxième petite question, est-ce que les données recueillies sur meteo.com te renvoient une valeur chiffrée??
(je voudrais me lancer dans la création d'un thermomètre-baromètre sous forme d'aiguille avec un lua, mais je n'ai pas encore trouvé comment extraire les données via conkyforecast...et peut-être que ce serait plus simple via le script meteo2.sh que tu mentionnes pour récupérer la valeur T° et Pression)@tous : ci-dessous un screen de mes conky's adaptés...pour résoudre le problème de positionnement des conky j'ai finalement scindé la partie network et la partie system... mais je n'ai pas encore trouvé comment determiner les valeurs uploadspeed max et downloadspeed max afin de les intégrer dans le code lua...
J'apprécie les graph à droite de ton écran... sympa.
Hors ligne
#754 Le 22/06/2011, à 20:52
- shamen456
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonjour a tous,
@pacbits : merci pour l'explication...cela te donne donc en résumé une info sur la qualité de ta connexion...
les conky a droite de mon ecran sont les suivants :
conkyrc_arcnet :
#==============================================================================
# conkyrc_arcnet
#
# author : SLK-modified by shamen456
# version : v2011-06-13
# license : Distributed under the terms of GNU GPL version 2 or later
#
#==============================================================================
background yes
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
temperature_unit celsius
double_buffer yes
no_buffers yes
text_buffer_size 2048
gap_x 0
gap_y 28
minimum_size 120 50
#maximum_width
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
border_inner_margin 2
border_outer_margin 2
alignment tr
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
override_utf8_locale yes
use_xft yes
xftfont caviar dreams:size=8
xftalpha 0.5
uppercase no
default_color FFFFFF
color1 D2CBC1
color2 ED7F77
color3 6B6860
color4 B1ADA7
color5 7B7870
color6 3F3C36
color7 black
lua_load ~/.conky/arcnetwork.lua
lua_draw_hook_pre main
TEXT
#${image ./pix/bigpanel2.png -s 130x395 -p +0,-10}
${goto 20}${voffset 2}${font Ubuntu:size=7,weight:bold}${color}Network ${hr 1}
${font Ubuntu:size=7,weight:normal}
#${alignr}SSID : ${wireless_essid wlan0}
${font Ubuntu:size=6,weight:bold}${goto 85}${voffset 3}${color7}${hr 22}
${color4}${voffset -15}${alignr}${wireless_bitrate wlan0}
${color}${goto 78}${voffset 1}${font Ubuntu:size=6,weight:bold}U${alignr}${totalup wlan0}
${goto 84}${voffset 5}${upspeedgraph wlan0 28,38 B1ADA7 ED7F77}
${alignr}${voffset -8}${font Ubuntu:size=6,weight:bold}${upspeed wlan0}/s
${alignr}${voffset 10}${font Ubuntu:size=6,weight:bold}${downspeed wlan0}/s
${goto 84}${voffset -4}${downspeedgraph wlan0 28,38 B1ADA7 ED7F77}
${goto 85}${voffset 6}${color7}${hr 24}
${goto 78}${voffset -15}${color}${font Ubuntu:size=6,weight:bold}D${alignr}${totaldown wlan0}
${color4}${voffset 0}${font Ubuntu:size=6,weight:bold}${alignr}Signal
${color}${font Ubuntu:size=7,weight:normal}${voffset 10}${goto 20}SSID : ${wireless_essid wlan0}
${color}${voffset 0}${font Ubuntu:size=6,weight:bold}${alignr}${addr wlan0}
${alignr}${texeci 3600 wget -O - http://ip.tupeux.com | tail}
et son arcnetwork.lua associé
--==============================================================================
-- arcnetwork.lua
--
-- author : SLK-adapted by shamen456
-- version : v2011-06-13
-- license : Distributed under the terms of GNU GPL version 2 or later
--
--==============================================================================
require 'cairo'
--------------------------------------------------------------------------------
-- gauge DATA
gauge = {
{
name='upspeedf', arg='', max_value=100,
x=85, y=101,
graph_radius=44,
graph_thickness=56,
graph_start_angle=180,
graph_unit_angle=1.8 , graph_unit_thickness=.5,
graph_bg_colour=0x000000, graph_bg_alpha=.2,
graph_fg_colour=0xED7F77, graph_fg_alpha=0,
hand_fg_colour=0x4F4B41, hand_fg_alpha=0.,
txt_radius=46,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0x4F4B41, txt_fg_alpha=0.,
graduation_radius=30,
graduation_thickness=10, graduation_mark_thickness=1,
graduation_unit_angle=22.5,
graduation_fg_colour=0x4F4B41, graduation_fg_alpha=0.,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='wireless_link_qual_perc', arg='wlan0', max_value=100,
x=85, y=100,
graph_radius=54,
graph_thickness=10,
graph_start_angle=180,
graph_unit_angle=1.8, graph_unit_thickness=1.2,
graph_bg_colour=0xefefef, graph_bg_alpha=0.5,
graph_fg_colour=0xED7F77, graph_fg_alpha=.7,
hand_fg_colour=0xED7F77, hand_fg_alpha=1,
txt_radius=66,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0xFFFFFF, txt_fg_alpha=1,
graduation_radius=56,
graduation_thickness=8, graduation_mark_thickness=2,
graduation_unit_angle=18,
graduation_fg_colour=0x4F4B41, graduation_fg_alpha=0.6,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
-- un graphe vide pour dessiner le background car je n'arrive pas a le dessiner avec les valeurs d'angle negatives
{
name='downspeedf', arg='', max_value=100,
x=85, y=101,
graph_radius=28,
graph_thickness=27,
graph_start_angle=180,
graph_unit_angle=.9, graph_unit_thickness=.5,
graph_bg_colour=0xB1ADA7, graph_bg_alpha=.5,
graph_fg_colour=0xED7F77, graph_fg_alpha=1,
hand_fg_colour=0x4F4B41, hand_fg_alpha=0.3,
txt_radius=46,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0x4F4B41, txt_fg_alpha=0.,
graduation_radius=30,
graduation_thickness=10, graduation_mark_thickness=1,
graduation_unit_angle=22.5,
graduation_fg_colour=0x4F4B41, graduation_fg_alpha=0.8,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='downspeedf', arg='wlan0', max_value=2100,
-- max_value que je voudrais remplacer par une formule
x=85, y=101,
graph_radius=28,
graph_thickness=27,
graph_start_angle=270,
graph_unit_angle=-.05, graph_unit_thickness=.5,
-- valeur negative derivee de 90/max_value pour avoir un ring counter clock
graph_bg_colour=0xffffff, graph_bg_alpha=0.0,
graph_fg_colour=0x4F4B41, graph_fg_alpha=1,
hand_fg_colour=0xED7F77, hand_fg_alpha=1,
txt_radius=44,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0x4F4B41, txt_fg_alpha=0.,
graduation_radius=33,
graduation_thickness=12, graduation_mark_thickness=1,
graduation_unit_angle=18,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='upspeedf', arg='wlan0', max_value=256,
x=85, y=100,
graph_radius=28,
graph_thickness=27,
graph_start_angle=270,
graph_unit_angle=.35, graph_unit_thickness=.5,
graph_bg_colour=0xB1ADA7, graph_bg_alpha=.5,
graph_fg_colour=0xED7F77, graph_fg_alpha=1,
hand_fg_colour=0x4F4B41, hand_fg_alpha=1,
txt_radius=44,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0xff0000, txt_fg_alpha=0.
,
graduation_radius=30,
graduation_thickness=10, graduation_mark_thickness=1,
graduation_unit_angle=22.5,
graduation_fg_colour=0x4F4B41, graduation_fg_alpha=0.8,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
}
-------------------------------------------------------------------------------
-- rgb_to_r_g_b
-- converts color in hexa to decimal
--
function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-------------------------------------------------------------------------------
-- angle_to_position
-- convert degree to rad and rotate (0 degree is top/north)
--
function angle_to_position(start_angle, current_angle)
local pos = current_angle + start_angle
return ( ( pos * (2 * math.pi / 360) ) - (math.pi / 2) )
end
-------------------------------------------------------------------------------
-- draw_gauge_ring
-- displays gauges
--
function draw_gauge_ring(display, data, value)
local max_value = data['max_value']
local x, y = data['x'], data['y']
local graph_radius = data['graph_radius']
local graph_thickness, graph_unit_thickness = data['graph_thickness'], data['graph_unit_thickness']
local graph_start_angle = data['graph_start_angle']
local graph_unit_angle = data['graph_unit_angle']
local graph_bg_colour, graph_bg_alpha = data['graph_bg_colour'], data['graph_bg_alpha']
local graph_fg_colour, graph_fg_alpha = data['graph_fg_colour'], data['graph_fg_alpha']
local hand_fg_colour, hand_fg_alpha = data['hand_fg_colour'], data['hand_fg_alpha']
local graph_end_angle = (max_value * graph_unit_angle) % 360
-- background ring
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, 0), angle_to_position(graph_start_angle, graph_end_angle))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_bg_colour, graph_bg_alpha))
cairo_set_line_width(display, graph_thickness)
cairo_stroke(display)
-- arc of value
local val = value % (max_value + 1)
local start_arc = 0
local stop_arc = 0
local i = 1
while i <= val do
start_arc = (graph_unit_angle * i) - graph_unit_thickness
stop_arc = (graph_unit_angle * i)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_fg_colour, graph_fg_alpha))
cairo_stroke(display)
i = i + 1
end
local angle = start_arc
-- hand
start_arc = (graph_unit_angle * val) - (graph_unit_thickness * 2)
stop_arc = (graph_unit_angle * val)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(hand_fg_colour, hand_fg_alpha))
cairo_stroke(display)
-- graduations marks
local graduation_radius = data['graduation_radius']
local graduation_thickness, graduation_mark_thickness = data['graduation_thickness'], data['graduation_mark_thickness']
local graduation_unit_angle = data['graduation_unit_angle']
local graduation_fg_colour, graduation_fg_alpha = data['graduation_fg_colour'], data['graduation_fg_alpha']
if graduation_radius > 0 and graduation_thickness > 0 and graduation_unit_angle > 0 then
local nb_graduation = graph_end_angle / graduation_unit_angle
local i = 0
while i < nb_graduation do
cairo_set_line_width(display, graduation_thickness)
start_arc = (graduation_unit_angle * i) - (graduation_mark_thickness / 2)
stop_arc = (graduation_unit_angle * i) + (graduation_mark_thickness / 2)
cairo_arc(display, x, y, graduation_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display,rgb_to_r_g_b(graduation_fg_colour,graduation_fg_alpha))
cairo_stroke(display)
cairo_set_line_width(display, graph_thickness)
i = i + 1
end
end
-- text
local txt_radius = data['txt_radius']
local txt_weight, txt_size = data['txt_weight'], data['txt_size']
local txt_fg_colour, txt_fg_alpha = data['txt_fg_colour'], data['txt_fg_alpha']
local movex = txt_radius * math.cos(angle_to_position(graph_start_angle, angle))
local movey = txt_radius * math.sin(angle_to_position(graph_start_angle, angle))
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, txt_weight)
cairo_set_font_size (display, txt_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(txt_fg_colour, txt_fg_alpha))
cairo_move_to (display, x + movex - (txt_size / 2), y + movey + 3)
cairo_show_text (display, value)
cairo_stroke (display)
-- caption
local caption = data['caption']
local caption_weight, caption_size = data['caption_weight'], data['caption_size']
local caption_fg_colour, caption_fg_alpha = data['caption_fg_colour'], data['caption_fg_alpha']
local tox = graph_radius * (math.cos((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
local toy = graph_radius * (math.sin((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, caption_weight);
cairo_set_font_size (display, caption_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(caption_fg_colour, caption_fg_alpha))
cairo_move_to (display, x + tox + 5, y + toy + 1)
-- bad hack but not enough time !
if graph_start_angle < 105 then
cairo_move_to (display, x + tox - 30, y + toy + 1)
end
cairo_show_text (display, caption)
cairo_stroke (display)
end
-------------------------------------------------------------------------------
-- go_gauge_rings
-- loads data and displays gauges
--
function go_gauge_rings(display)
local function load_gauge_rings(display, data)
local str, value = '', 0
str = string.format('${%s %s}',data['name'], data['arg'])
str = conky_parse(str)
value = tonumber(str)
draw_gauge_ring(display, data, value)
end
for i in pairs(gauge) do
load_gauge_rings(display, gauge[i])
end
end
-------------------------------------------------------------------------------
-- MAIN
function conky_main()
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)
local display = cairo_create(cs)
local updates = conky_parse('${updates}')
update_num = tonumber(updates)
if update_num > 5 then
go_gauge_rings(display)
end
end
et pour les donnees systeme :
conkyrc_arcsys
#==============================================================================
# conkyrc_arcsys
#
# author : SLK-modified by shamen456
# version : v2011-06-13
# license : Distributed under the terms of GNU GPL version 2 or later
#
#==============================================================================
background yes
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
temperature_unit celsius
double_buffer yes
no_buffers yes
text_buffer_size 2048
gap_x 0
gap_y 260
minimum_size 120 0
maximum_size
#maximum_width
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
border_inner_margin 2
border_outer_margin 2
alignment tr
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
override_utf8_locale yes
use_xft yes
xftfont caviar dreams:size=8
xftalpha 0.5
uppercase no
default_color FFFFFF
color1 D2CBC1
color2 ED7F77
color3 6B6860
color4 B1ADA7
color5 7B7870
color6 3F3C36
color7 black
lua_load ~/.conky/arcsystem.lua
lua_draw_hook_post main
TEXT
#${image ./pix/bigpanel2.png -s 130x395 -p +0,-10}
${voffset 0}${goto 20}${font Ubuntu:size=7,weight:bold}${color}System ${hr 1}
${goto 10}${font Ubuntu:size=7,weight:normal}${color}Kernel ${kernel}${font Ubuntu:size=7,weight:bold}
${goto 89}${voffset 4}RAM
${voffset 6}${goto 89}${font Ubuntu:size=7,weight:bold}CPU
${voffset -1}${goto 84}${cpugraph 15,38 B1ADA7 ED7F77}
${goto 75}${font Ubuntu:size=14,weight:normal}${hwmon 0 temp 1} °C
${voffset 5}${goto 85}${color2}${hr 7}${font Ubuntu:size=7,weight:normal}
${voffset -12}${goto 88}${color}${font Ubuntu:size=6,weight:bold}CPU 1
${voffset -3}${goto 85}${color2}${hr 7}
${voffset -9}${goto 88}${color}${font Ubuntu:size=6,weight:bold}CPU 2
${voffset 15}${goto 85}${color7}${hr 25}
${color4}${voffset -15}${goto 89}${font Ubuntu:size=6,weight:bold}${mem}
${voffset -1}${goto 85}${font Ubuntu:size=6,weight:bold} /${memmax}
${voffset 6}${goto 10}${color2}${top cpu 1}% ${goto 45}${font Ubuntu:size=6,weight:normal}${top name 1}
${goto 10}${color1}${top cpu 2}% ${goto 45}${font Ubuntu:size=6,weight:normal}${top name 2}
${goto 10}${color1}${top cpu 3}% ${goto 45}${font Ubuntu:size=6,weight:normal}${top name 3}
et le arcsystem.lua
--==============================================================================
-- arcsystem.lua
--
-- author : SLK-adapted by shamen456
-- version : v2011-06-13
-- license : Distributed under the terms of GNU GPL version 2 or later
--
--==============================================================================
require 'cairo'
--------------------------------------------------------------------------------
-- gauge DATA
gauge = {
{
name='cpu', arg='', max_value=100,
x=85, y=100,
graph_radius=48,
graph_thickness=50,
graph_start_angle=180,
graph_unit_angle=1.8, graph_unit_thickness=1.,
graph_bg_colour=0x000000, graph_bg_alpha=0.2,
graph_fg_colour=0xB1ADA7, graph_fg_alpha=0,
hand_fg_colour=0xED7F77, hand_fg_alpha=0,
txt_radius=68,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0xFFFFFF, txt_fg_alpha=0,
graduation_radius=56,
graduation_thickness=8, graduation_mark_thickness=2,
graduation_unit_angle=18,
graduation_fg_colour=0x4F4B41, graduation_fg_alpha=0.6,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='cpu', arg='cpu1', max_value=100,
x=85, y=100,
graph_radius=26,
graph_thickness=7,
graph_start_angle=180,
graph_unit_angle=1.8, graph_unit_thickness=1.2,
graph_bg_colour=0xefefef, graph_bg_alpha=0.6,
graph_fg_colour=0xED7F77, graph_fg_alpha=1,
hand_fg_colour=0x4F4B41, hand_fg_alpha=0.3,
txt_radius=14,
txt_weight=0, txt_size=12.0,
txt_fg_colour=0xffffff, txt_fg_alpha=0.0,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='cpu', arg='cpu2', max_value=100,
x=85, y=100,
graph_radius=34,
graph_thickness=7,
graph_start_angle=180,
graph_unit_angle=1.8, graph_unit_thickness=1.2,
graph_bg_colour=0xefefef, graph_bg_alpha=0.6,
graph_fg_colour=0xED7F77, graph_fg_alpha=1,
hand_fg_colour=0x4F4B41, hand_fg_alpha=0.3,
txt_radius=46,
txt_weight=0, txt_size=12.0,
txt_fg_colour=0xff0000, txt_fg_alpha=0.0,
graduation_radius=33,
graduation_thickness=12, graduation_mark_thickness=1,
graduation_unit_angle=18,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.8,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='cpu', arg='cpu0', max_value=100,
x=85, y=100,
graph_radius=30,
graph_thickness=18,
graph_start_angle=180,
graph_unit_angle=1.8, graph_unit_thickness=1,
graph_bg_colour=0xffffff, graph_bg_alpha=0.,
graph_fg_colour=0xff0000, graph_fg_alpha=0.0,
hand_fg_colour=0x4F4B41, hand_fg_alpha=1.0,
txt_radius=45,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0xFFFFFF, txt_fg_alpha=1,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.8,
},
{
name='memperc', arg='', max_value=100,
x=85, y=100,
graph_radius=54,
graph_thickness=10,
graph_start_angle=180,
graph_unit_angle=1.8, graph_unit_thickness=1.,
graph_bg_colour=0xefefef, graph_bg_alpha=0.6,
graph_fg_colour=0xB1ADA7, graph_fg_alpha=1,
hand_fg_colour=0xED7F77, hand_fg_alpha=1,
txt_radius=68,
txt_weight=0, txt_size=10.0,
txt_fg_colour=0xFFFFFF, txt_fg_alpha=1,
graduation_radius=56,
graduation_thickness=8, graduation_mark_thickness=2,
graduation_unit_angle=18,
graduation_fg_colour=0x4F4B41, graduation_fg_alpha=0.6,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
}
-------------------------------------------------------------------------------
-- rgb_to_r_g_b
-- converts color in hexa to decimal
--
function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-------------------------------------------------------------------------------
-- angle_to_position
-- convert degree to rad and rotate (0 degree is top/north)
--
function angle_to_position(start_angle, current_angle)
local pos = current_angle + start_angle
return ( ( pos * (2 * math.pi / 360) ) - (math.pi / 2) )
end
-------------------------------------------------------------------------------
-- draw_gauge_ring
-- displays gauges
--
function draw_gauge_ring(display, data, value)
local max_value = data['max_value']
local x, y = data['x'], data['y']
local graph_radius = data['graph_radius']
local graph_thickness, graph_unit_thickness = data['graph_thickness'], data['graph_unit_thickness']
local graph_start_angle = data['graph_start_angle']
local graph_unit_angle = data['graph_unit_angle']
local graph_bg_colour, graph_bg_alpha = data['graph_bg_colour'], data['graph_bg_alpha']
local graph_fg_colour, graph_fg_alpha = data['graph_fg_colour'], data['graph_fg_alpha']
local hand_fg_colour, hand_fg_alpha = data['hand_fg_colour'], data['hand_fg_alpha']
local graph_end_angle = (max_value * graph_unit_angle) % 360
-- background ring
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, 0), angle_to_position(graph_start_angle, graph_end_angle))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_bg_colour, graph_bg_alpha))
cairo_set_line_width(display, graph_thickness)
cairo_stroke(display)
-- arc of value
local val = value % (max_value + 1)
local start_arc = 0
local stop_arc = 0
local i = 1
while i <= val do
start_arc = (graph_unit_angle * i) - graph_unit_thickness
stop_arc = (graph_unit_angle * i)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_fg_colour, graph_fg_alpha))
cairo_stroke(display)
i = i + 1
end
local angle = start_arc
-- hand
start_arc = (graph_unit_angle * val) - (graph_unit_thickness * 2)
stop_arc = (graph_unit_angle * val)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(hand_fg_colour, hand_fg_alpha))
cairo_stroke(display)
-- graduations marks
local graduation_radius = data['graduation_radius']
local graduation_thickness, graduation_mark_thickness = data['graduation_thickness'], data['graduation_mark_thickness']
local graduation_unit_angle = data['graduation_unit_angle']
local graduation_fg_colour, graduation_fg_alpha = data['graduation_fg_colour'], data['graduation_fg_alpha']
if graduation_radius > 0 and graduation_thickness > 0 and graduation_unit_angle > 0 then
local nb_graduation = graph_end_angle / graduation_unit_angle
local i = 0
while i < nb_graduation do
cairo_set_line_width(display, graduation_thickness)
start_arc = (graduation_unit_angle * i) - (graduation_mark_thickness / 2)
stop_arc = (graduation_unit_angle * i) + (graduation_mark_thickness / 2)
cairo_arc(display, x, y, graduation_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display,rgb_to_r_g_b(graduation_fg_colour,graduation_fg_alpha))
cairo_stroke(display)
cairo_set_line_width(display, graph_thickness)
i = i + 1
end
end
-- text
local txt_radius = data['txt_radius']
local txt_weight, txt_size = data['txt_weight'], data['txt_size']
local txt_fg_colour, txt_fg_alpha = data['txt_fg_colour'], data['txt_fg_alpha']
local movex = txt_radius * math.cos(angle_to_position(graph_start_angle, angle))
local movey = txt_radius * math.sin(angle_to_position(graph_start_angle, angle))
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, txt_weight)
cairo_set_font_size (display, txt_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(txt_fg_colour, txt_fg_alpha))
cairo_move_to (display, x + movex - (txt_size / 2), y + movey + 3)
cairo_show_text (display, value)
cairo_stroke (display)
-- caption
local caption = data['caption']
local caption_weight, caption_size = data['caption_weight'], data['caption_size']
local caption_fg_colour, caption_fg_alpha = data['caption_fg_colour'], data['caption_fg_alpha']
local tox = graph_radius * (math.cos((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
local toy = graph_radius * (math.sin((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, caption_weight);
cairo_set_font_size (display, caption_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(caption_fg_colour, caption_fg_alpha))
cairo_move_to (display, x + tox + 5, y + toy + 1)
-- bad hack but not enough time !
if graph_start_angle < 105 then
cairo_move_to (display, x + tox - 30, y + toy + 1)
end
cairo_show_text (display, caption)
cairo_stroke (display)
end
-------------------------------------------------------------------------------
-- go_gauge_rings
-- loads data and displays gauges
--
function go_gauge_rings(display)
local function load_gauge_rings(display, data)
local str, value = '', 0
str = string.format('${%s %s}',data['name'], data['arg'])
str = conky_parse(str)
value = tonumber(str)
draw_gauge_ring(display, data, value)
end
for i in pairs(gauge) do
load_gauge_rings(display, gauge[i])
end
end
-------------------------------------------------------------------------------
-- MAIN
function conky_main()
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)
local display = cairo_create(cs)
local updates = conky_parse('${updates}')
update_num = tonumber(updates)
if update_num > 5 then
go_gauge_rings(display)
end
end
certaines valeurs et variables dans les .lua notamment doivent etre adaptées à ton systeme (le reseau par ex est configuré pour le wifi (wlan0))
Hors ligne
#755 Le 24/06/2011, à 13:12
- djipey
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonjour.
Voilà cela fait un moment que je cherche une solution à un mystère. Depuis toujours il me semble que la taille du conky est fixée dés le début, dans la partie avant TEXT.
Hors voilà, si l'on veut réaliser des conky qui s'adaptent à une image, on est bien embêtés lorsque l'image n'a pas une taille fixe. Il est impossible à ma connaissance de changer dynamiquement la taille d'un conky pour afficher une image de taille variable (que l'on récupère par exemple sur le web).
Aussi je me demandais: si conky ne le fait pas tout seul, pourquoi ne le ferions nous pas à sa place? j'ai déja un script bash pour récupérer une image sur internet, et en bash il sera facile d'obtenir les dimensions de ladite image. Ensuite, il suffirait de dire au script de modifier la taille du conky dans le conkyrc. Facile. Ce que je voudrais savoir, c'est si le conky en question se rechargera automatiquement. Avez vous une idée sur la question? Que pensez vous de cette solution (si tant est que quelqu'un en ait besoin)?
Hors ligne
#756 Le 24/06/2011, à 13:21
- Levi59
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Tu peux facilement tester ça...
tu créés un conkyrc vide avec une config qui fonctionne, et tu lances
sed -i '/motif/nouveaumotif/' /cheminvers/fichier.conkyrc
si Conky s'actualise alors c'est bon!
Pour ce qui est d'un conky qui change de taille/position selon le fond, ça peut être intéressant...
Dernière modification par Levi59 (Le 24/06/2011, à 13:22)
Hors ligne
#757 Le 24/06/2011, à 21:00
- fanou18000
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
usm77, je trouve ton conky et ton wallpaper sublimes
"C'est en faisant des erreurs qu'on avance..."
Donc ici pour apprendre.
Ubuntu 10.04 Lucid Lynx et GNOME 2.30.2 (Depuis le 14/12/09)
Hors ligne
#758 Le 25/06/2011, à 11:32
- djipey
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Alors voilà, pour ceux que ça intéresse, en modifiant avec sed une variable dans le conkyrc, par exemple gap_x, le conky ne se recharge pas automatiquement. J'ai l'impression qu'il faut que l'utilisateur sauvegarde explicitement son conkyrc lors de l'édition. À ce moment, je pense qu'une commande de rechargement est lancée automatiquement, et ce serait cool de savoir comment. J'ai cherché dans le man mais je n'ai rien trouvé. Je précise que j'ai essayé sur les variables et du texte avant et après TEXT.
Cela dit, utiliser sed, tuer puis relancer le conky marche très bien. Pour ce qui est de la taille minimale du conky, il faut modifier le conkyrc lui-même, mais pour la position, la commande conky peut être lancée avec des arguments de position.
Voilà, j'espère que cela servira à quelqu'un. Et si il y en a un qui sait comment recharger le conky, qu'il le dise
EDIT:
killall -SIGUSR1 conky
killall -SIGHUP conky
Dernière modification par djipey (Le 25/06/2011, à 11:40)
Hors ligne
#759 Le 25/06/2011, à 21:10
- fanou18000
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonsoir
Mon nouveau Conky :
A noter en bas à droite, la gestion des disques.
Si aucun disque -> déconnecté.
Si disque branché -> Affichage de l'espace libre/l'espace occupé/l'espace total.
Dernière modification par fanou18000 (Le 26/06/2011, à 16:52)
"C'est en faisant des erreurs qu'on avance..."
Donc ici pour apprendre.
Ubuntu 10.04 Lucid Lynx et GNOME 2.30.2 (Depuis le 14/12/09)
Hors ligne
#760 Le 26/06/2011, à 12:06
- djipey
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bon, voilà le script bonjour madame remanié, pour ceux qui connaissent. Il a récupère l'image quotidienne du site bonjour madame et l'affiche. Il est adaptable à tout site proposant une image, il y aura juste à changer l'url et à enlever les conditions pour l'heure. Il place l'image toujours au même endroit, et adapte la taille du conky à l'image, qui du coup peut être de n'importe quelle taille. J'ai essayé de commenter le plus possible pour que cela soit clair.
#!/bin/bash
# Post original sur http://apps.magetys.com/linux/bonjourmadame/bonjourMadame
# Modifié par djipey le 26/06/2011
# On définit le nom de l'image du jour
imagedujour="/home/djipey/images/bonjourmme/`date '+%d_%m_%Y'.jpg`"
heure=`date '+%H'`
# On teste si l'image du jour existe et si il est entre 10 h et 14, pour éviter
# de télécharger l'image de la veille à minuit de la nouvelle journée. Si oui, on arrête le script, sinon on la
# télécharge.
if [ ! -e $imagedujour ] && [ $heure -ge 10 ] && [ $heure -le 14 ]
then
#On essaie de télécharger l'image du jour
URL=`wget -O - -q http://www.bonjourmadame.fr/ | grep -Eo "(http://www.bonjourmadame.fr/photo/[^\"]+)|(http://[0-9]+.media.tumblr.com/tumblr.*?00.*?jpg)" | grep -v bonjour |head -n 1` > /dev/null
# On teste si le téléchargement a réussi. Si oui, on effectue les
# transformations, sinon on quitte le script.
if [ -n $URL ]
then
#rm /home/djipey/images/bonjourmme/*.jpg
rm /home/djipey/conky/images/new.png # On enlève la vieille image utilisée par conky
PHOTO="$imagedujour"
# On trnasforme l'url en image
wget $URL -O $PHOTO > /dev/null
# On choisit l'angle de la photo
ANGLE=0
# pour la commande convert -> sudo apt-get install imagemagick
# On convertit l'image pour conky: polaroid, changement de taille,
# fond, ... Le "^" sert à conserver l'échelle.
convert $PHOTO -gravity center -resize 320x320^ -bordercolor snow -background black -polaroid $ANGLE /home/djipey/conky/images/new.png # > /dev/null
else
exit
fi
#On récupère les dimensions de la photo du conky
let "largeur=`identify -format '%w' /home/djipey/conky/images/new.png`"
let "hauteur=`identify -format '%h' /home/djipey/conky/images/new.png`"
#echo "$largeur x $hauteur"
# On remplace les dimensions minimales du conky dans le conkyrc, à partir
# des dimensions de la photo
sed -ir 's/minimum_size.*/minimum_size '"$largeur $hauteur"'/' /home/djipey/conky/conkyrc_mme
#sed -ir 's/gap_x.*/gap_x '"$largeur"'/' /home/djipey/conky/conkyrc_mme
# On affecte à la hauteur une nouvelle valeur. ATENTION, ici, on fait ça
# pour que le haut de la photo soit toujours à la même distance du haut de
# l'écran. Exemple, 1060 est ici la position du haut de l'image par rapport
# au bas de l'écran.
let "hauteur=1060-$hauteur"
sed -ir 's/gap_y.*/gap_y '"$hauteur"'/' /home/djipey/conky/conkyrc_mme
# On relance le lou les conky(s)
killall -SIGUSR1 conky
else
#echo "l'image du jour existe"
exit
fi
Hors ligne
#761 Le 28/06/2011, à 11:46
- Frrout
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut à tous !
Après avoir passé pas mal de temps à lire vos configs (et à vous piquer des idées !), je me décide enfin à m'inscrire, et à poster la mienne (mais c'est pas anodin, j'ai quelques questions !). C'est un mélange de plusieurs trucs que j'ai volé à droite-à gauche.
Voilà mon conkyrc :
# Conky settings #
background no
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
double_buffer yes
no_buffers yes
text_buffer_size 2048
#imlib_cache_size 0
# Window specifications #
own_window yes
own_window_type override
own_window_transparent yes
#own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
border_inner_margin 0
border_outer_margin 0
minimum_size 200 250
maximum_width 200
alignment tr
gap_x 35
gap_y 55
# Graphics settings #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
# Text settings #
use_xft yes
xftfont caviar dreams:size=8
xftalpha 0.5
# Lua Load #
lua_load ~/.conky/clock_rings.lua
lua_draw_hook_pre clock_rings
TEXT
${voffset 8}${color FF6600}${font caviar dreams:size=16}${time %A}${font}${voffset -8}${alignr 50}${color FFFFFF}${font caviar dreams:size=38}${time %e}${font}
${color FFFFFF}${voffset -30}${color FFFFFF}${font caviar dreams:size=18}${time %b}${font}${voffset -3} ${color FFFFFF}${font caviar dreams:size=20}${time %Y}${font}${color FF6600}${hr}
${voffset 140}${font caviar dreams:size=10}${alignr}HOME${font}
${font caviar dreams:size=12}${color FFFFFF}${alignr}${weather http://weather.noaa.gov/pub/data/observations/metar/stations/ LFBD temperature temperature 30} °C${font}
${image ~/.conky/new-ubuntu-logo.png -p 64,125 -s 70x20}
${color FFFFFF}${goto 94}${voffset 33}${cpu cpu0}%
${color FF6600}${goto 94}CPU
${color FFFFFF}${goto 110}${voffset 32}${memperc}%
${color FF6600}${goto 110}RAM
${color FFFFFF}${goto 129}${voffset 39}${fs_used_perc /}%
${color FF6600}${goto 129}Disk
${color FFFFFF}${voffset 49}Gmail : ${color FF6600}${execi 300 perl ~/.conky/gmail.pl}
et le clock_rings.lua :
--[[
Clock Rings by Linux Mint (2011) reEdited by despot77
This script draws percentage meters as rings, and also draws clock hands if you want! It is fully customisable; all options are described in the script. This script is based off a combination of my clock.lua script and my rings.lua script.
IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this doesn't happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num>5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num>3; conversely if you update Conky every 0.5s, you should use update_num>10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
lua_load ~/scripts/clock_rings.lua
lua_draw_hook_pre clock_rings
Changelog:
+ v1.0 -- Original release (30.09.2009)
v1.1p -- Jpope edit londonali1010 (05.10.2009)
*v 2011mint -- reEdit despot77 (18.02.2011)
]]
settings_table = {
{
-- Edit this table to customise your rings.
-- You can create more rings simply by adding more elements to settings_table.
-- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
name='time',
-- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''.
arg='%I.%M',
-- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
max=12,
-- "bg_colour" is the colour of the base ring.
bg_colour=0xffffff,
-- "bg_alpha" is the alpha value of the base ring.
bg_alpha=0.1,
-- "fg_colour" is the colour of the indicator part of the ring.
fg_colour=0xFF6600,
-- "fg_alpha" is the alpha value of the indicator part of the ring.
fg_alpha=0.2,
-- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
x=100, y=150,
-- "radius" is the radius of the ring.
radius=50,
-- "thickness" is the thickness of the ring, centred around the radius.
thickness=5,
-- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
start_angle=0,
-- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger than start_angle.
end_angle=360
},
{
name='time',
arg='%M.%S',
max=60,
bg_colour=0xffffff,
bg_alpha=0.1,
fg_colour=0xFF6600,
fg_alpha=0.4,
x=100, y=150,
radius=56,
thickness=5,
start_angle=0,
end_angle=360
},
{
name='time',
arg='%S',
max=60,
bg_colour=0xffffff,
bg_alpha=0.1,
fg_colour=0xFF6600,
fg_alpha=0.6,
x=100, y=150,
radius=62,
thickness=5,
start_angle=0,
end_angle=360
},
{
name='time',
arg='%m',
max=12,
bg_colour=0xffffff,
bg_alpha=0.1,
fg_colour=0xFF6600,
fg_alpha=0.8,
x=100, y=150,
radius=70,
thickness=5,
start_angle=-90,
end_angle=90
},
{
name='time',
arg='%d',
max=31,
bg_colour=0xffffff,
bg_alpha=0.1,
fg_colour=0xFF6600,
fg_alpha=1,
x=100, y=150,
radius=76,
thickness=5,
start_angle=-90,
end_angle=90
},
{
name='cpu',
arg='cpu0',
max=100,
bg_colour=0xffffff,
bg_alpha=0.2,
fg_colour=0xFF6600,
fg_alpha=0.8,
x=120, y=300,
radius=23,
thickness=5,
start_angle=-90,
end_angle=180
},
{
name='memperc',
arg='',
max=100,
bg_colour=0xffffff,
bg_alpha=0.2,
fg_colour=0xFF6600,
fg_alpha=0.8,
x=140, y=355,
radius=26,
thickness=5,
start_angle=-90,
end_angle=180
},
{
name='fs_used_perc',
arg='',
max=100,
bg_colour=0xffffff,
bg_alpha=0.2,
fg_colour=0xFF6600,
fg_alpha=0.8,
x=162, y=417,
radius=29,
thickness=5,
start_angle=-90,
end_angle=180
},
}
-- Use these settings to define the origin and extent of your clock.
clock_r=65
-- "clock_x" and "clock_y" are the coordinates of the centre of the clock, in pixels, from the top left of the Conky window.
clock_x=100
clock_y=150
show_seconds=true
require 'cairo'
function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
function draw_ring(cr,t,pt)
local w,h=conky_window.width,conky_window.height
local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
local angle_0=sa*(2*math.pi/360)-math.pi/2
local angle_f=ea*(2*math.pi/360)-math.pi/2
local t_arc=t*(angle_f-angle_0)
-- Draw background ring
cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
cairo_set_line_width(cr,ring_w)
cairo_stroke(cr)
-- Draw indicator ring
cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
cairo_stroke(cr)
end
function draw_clock_hands(cr,xc,yc)
local secs,mins,hours,secs_arc,mins_arc,hours_arc
local xh,yh,xm,ym,xs,ys
secs=os.date("%S")
mins=os.date("%M")
hours=os.date("%I")
secs_arc=(2*math.pi/60)*secs
mins_arc=(2*math.pi/60)*mins+secs_arc/60
hours_arc=(2*math.pi/12)*hours+mins_arc/12
-- Draw hour hand
xh=xc+0.7*clock_r*math.sin(hours_arc)
yh=yc-0.7*clock_r*math.cos(hours_arc)
cairo_move_to(cr,xc,yc)
cairo_line_to(cr,xh,yh)
cairo_set_line_cap(cr,CAIRO_LINE_CAP_ROUND)
cairo_set_line_width(cr,5)
cairo_set_source_rgba(cr,1.0,1.0,1.0,1.0)
cairo_stroke(cr)
-- Draw minute hand
xm=xc+clock_r*math.sin(mins_arc)
ym=yc-clock_r*math.cos(mins_arc)
cairo_move_to(cr,xc,yc)
cairo_line_to(cr,xm,ym)
cairo_set_line_width(cr,3)
cairo_stroke(cr)
-- Draw seconds hand
if show_seconds then
xs=xc+clock_r*math.sin(secs_arc)
ys=yc-clock_r*math.cos(secs_arc)
cairo_move_to(cr,xc,yc)
cairo_line_to(cr,xs,ys)
cairo_set_line_width(cr,1)
cairo_stroke(cr)
end
end
function conky_clock_rings()
local function setup_rings(cr,pt)
local str=''
local value=0
str=string.format('${%s %s}',pt['name'],pt['arg'])
str=conky_parse(str)
value=tonumber(str)
pct=value/pt['max']
draw_ring(cr,pct,pt)
end
-- Check that Conky has been running for at least 5s
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)
local cr=cairo_create(cs)
local updates=conky_parse('${updates}')
update_num=tonumber(updates)
if update_num>5 then
for i in pairs(settings_table) do
setup_rings(cr,settings_table[i])
end
end
draw_clock_hands(cr,clock_x,clock_y)
end
Petites questions : d'abord, dans les rings lua, il y a une courbe qui se remplit selon le jour du mois, mais tous les mois sont considérés comme ayant 31 jours. C'est un détail, mais je suis curieux... J'ai bataillé, mais je n'ai pas du tout trouvé comment faire. J'ai trouvé ce lien : http://lua-users.org/wiki/DayOfWeekAndD … nthExample mais je ne sais pas du tout comment intégrer ça dedans...
Ensuite, j'appelle aussi dans un autre conky un calendrier, qui s'affiche en bas, à droite (j'ai fait ça dans un autre conky, histoire qu'il soit toujours calé, mais je ne sais pas si c'est le meilleur choix), mais le script que j'ai trouvé est forcément dans une police à chasse fixe. Est-ce que vous connaissez un moyen de caler tout ça avec une autre police ?
voila le conky-cal
# Conky settings #
background no
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
double_buffer yes
no_buffers yes
text_buffer_size 512
# Text settings #
use_xft yes
xftfont DejaVu Sans Mono :size=8
xftalpha 0.5
# Window specifications #
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
alignment br
gap_x 20
gap_y -8
# Graphics settings #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
# Couleurs Calendrier #
color0 FFFFFF # Couleur de la date
color1 FF6600 # Couleur initiale du calendrier
color2 CF4000 # Couleur des dates week end
TEXT
${execp perl ~/.conky/calendrier.pl --aligneadroite}
et calendrier.pl
#!/usr/bin/perl -w
#####################################
# Nom du programme : Calendrier
#####################################
use strict;
use integer;
sub help {
my @nom = split "/", $0;
print "Utilisation : $nom[$#nom] [argument]\n"
. "[argument] : --aligneradroite\n"
. " --aligneaucentre\n"
. " --aligneagauche\n";
exit(1);
}
if(scalar @ARGV != 1) {
help;
}
else {
my $aligne_a_droite = 0;
my $aligne_au_centre = 0;
if($ARGV[0] eq "--aligneadroite") {
$aligne_a_droite++;
}
elsif($ARGV[0] eq "--aligneaucentre") {
$aligne_au_centre++;
}
elsif($ARGV[0] eq "--aligneagauche") {
# On ne fait rien
}
else {
help;
}
use constant VERSION => 0.10;
# Définition des couleurs venant de conky
use constant COULEUR_DATE => '${color0}'; # Couleur de la date
use constant COULEUR_INITIALE => '${color1}'; # Couleur initiale
use constant COULEUR_WEEKEND => '${color2}'; # Couleur du week end
use constant LARGEUR => 20; # Nombre de caractères par ligne
# Définition des mois
my %nb_jours_par_mois = (
'Janvier' => 31,
'Février' => 28,
'Mars' => 31,
'Avril' => 30,
'Mai' => 31,
'Juin' => 30,
'Juillet' => 31,
'Août' => 31,
'Septembre' => 30,
'Octobre' => 31,
'Novembre' => 30,
'Décembre' => 31,
);
# Récupération des informations
my $jour = (localtime)[3];
my $jour_semaine = (localtime)[6];
my $mois_en_chiffre = (localtime)[4];
my $mois = (qw(Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre))[$mois_en_chiffre];
my $annee = 1900 + (localtime)[5];
# Adaptation au calendrier Français qui commence le Lundi et non le Dimanche
my $sav_jour = $jour;
$jour--;
$jour = 6 if($jour < 0);
# Détermination d'une année bissextile
my $bissextile =
$annee % 4 ? 0 :
$annee % 100 ? 1 :
$annee % 400 ? 0 : 1;
$nb_jours_par_mois{'Février'}++ if($bissextile); # Si l'année est bissextile on ajoute un jour à Février
# Rechercher le jour de la semaine du 1ier du mois (voir POD)
my @compensation = (1, 4, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6);
my $emplacement_premier_jour_mois = $annee - 2000;
$emplacement_premier_jour_mois += $emplacement_premier_jour_mois / 4;
$emplacement_premier_jour_mois++;
$emplacement_premier_jour_mois += $compensation[$mois_en_chiffre];
$emplacement_premier_jour_mois-- if($bissextile && ($mois_en_chiffre < 2));
$emplacement_premier_jour_mois += 6; # Il faudra rectifier en 2100
$emplacement_premier_jour_mois %= 7;
$emplacement_premier_jour_mois += 5;
# Calcul pour mettre l'entête au milieu
my $taille_mois_annee = length("$mois $annee");
my $taille_entete = (LARGEUR - $taille_mois_annee) / 2;
my $taille_reste = LARGEUR - ($taille_entete + $taille_mois_annee);
# Mise en forme pour l'affichage
my $entete = COULEUR_INITIALE . " " x $taille_entete . "$mois $annee" . " " x $taille_reste . "\n";
my @calendrier = qw(Lu Ma Me Je Ve Sa Di);
foreach my $element (1..($emplacement_premier_jour_mois)%7) {
push @calendrier, " ";
}
# On rentre toutes les dates dans le tableau
foreach my $element (1..$nb_jours_par_mois{$mois}) {
push @calendrier, (($element < 10) ? " " . $element : $element);
}
# On rempli les dates du mois suivant par deux espaces
my $jours_restants = 7 - ((scalar @calendrier) % 7);
foreach my $element (1..$jours_restants) {
push @calendrier, " ";
}
# On applique la couleur sur le samedi
for(my $i = 5; $i < scalar @calendrier; $i += 7) {
next if(($sav_jour eq $calendrier[$i]) || (" $sav_jour" eq $calendrier[$i]));
$calendrier[$i] = COULEUR_WEEKEND . $calendrier[$i] . COULEUR_INITIALE;
}
# On applique la couleur sur le dimanche
for(my $i = 6; $i < scalar @calendrier; $i += 7) {
next if(($sav_jour eq $calendrier[$i] || " $sav_jour" eq $calendrier[$i]));
$calendrier[$i] = COULEUR_WEEKEND . $calendrier[$i] . COULEUR_INITIALE;
}
# Affichage du calendrier
if($aligne_a_droite) {
print '${alignr}' . $entete . '${alignr}';
}
elsif($aligne_au_centre) {
print '${alignc}' . $entete . '${alignc}';
}
else {
print $entete;
}
my $j = 0;
foreach my $date (@calendrier) {
$j++;
if(($date eq $sav_jour) || ($date eq " $sav_jour")) {
print COULEUR_DATE . $date . COULEUR_INITIALE;
}
else {
print $date;
}
if(($j%7) == 0) {
if($aligne_a_droite) {
print "\n" . '${alignr}';
}
elsif($aligne_au_centre) {
print "\n" . '${alignc}';
}
else {
print "\n";
}
}
else {
print " ";
}
}
}
__END__
=encoding utf8
=head1 Nom
Calendrier
=head1 SYNOPSIS
Permet d'afficher un calendrier dans conky. La date courante est affichée d'une couleur différente
=head1 DESCRIPTION
Ce script Perl s'utilise avec conky B<uniquement>. Deux couleurs lui sont passées en paramètre.
C<color1> dans conky sera la couleur de la date courante et C<color0> permettra de revenir à la
couleur originale. C<color2> sera la date indiquant les samedis et dimanches.
=head1 AUTEUR
Chipster Julien
=head1 UTILISATION
Dans le fichier de configuration de conky, il faut impérativement que le buffer soit étendu à 512 bytes.Par défaut celui-ci est à 256 ce qui pose de gros problème d'affichage. Voici le code à
rajouter :
C<text_buffer_size 512>
Ce script s'utiliser comme ceci :
C<${execp perl Calendrier} [argument]>
Si vous avez fait un chmod +x Calendrier :
C<${execp ./Calendrier} [argument]>
[argument] peut prendre une de ces 3 valeurs :
=over 4
item --aligneagauche
item --aligneadroite
item --aligneaucentre
=back
=head1 BOGUES
Aucun connu actuellement
=head1 Évolutions
=over 4
=item
Mettre les autres jours n'appartenant pas au mois en cours d'une couleur différente
=back
=head1 Changelog
=over 4
=item 05/09/2009
Correction d'un bogue d'affichage de la couleur du jour sur le samedi et le dimanche
=item 01/09/2009
Suppression de la ligne vide au début de calendrier
Mise en couleur des jours inférieurs à 10 à cause d'une égalité erronée
=item 23/08/2009
Correction d'un bogue d'affichage. Lorsque la couleur COULEUR_INITIALE était différente du blanc, le début du calendrier (mois + année + Lu + Ma + Me + Je + Ve) était affiché en blanc alors qu'ils
auraient du être de la couleur COULEUR_INITIALE.
Correction d'un bogue d'affichage lorsqu'on utilisait la balise $alignc avant l'exécution du script. Ceci avait pour effet de décaler bizarrement le mois et l'année. Pour palier la non transmission
du positionnement de conky vers les scripts, j'ai rajouté un argument obligatoire à passer en paramêtre
=item 22/08/2009
Les jours correspondant au weekend, à savoir samedi et dimanche, sont de couleur différente des autre jour de la semaine.
Cette version apporte aussi un changement important au niveau du stockage du calendrier puisque maintenant il se fait dans un tableau et non plus dans une variable texte.
Grâce à cette manière de procéder, un gain sur le temps de mise en page a été apporté. Cette approche aurait du être la première ...
=item 20/08/2009
Remplacement de la balise ${color} par ${color0} suite à un bogue d'affichage dans conky lorsque l'utilisateur affichait intégralement le calendrier d'une couleur différente du blanc
=item 20/08/2009
Lors du découpage du calendrier, j'ai rajouté un espace de chaque coté de la date courante pour supprimer un bogue d'affichage de la date
en couleur
=item 19/08/2009
Remplacer le code C<$my calendrier = `cal`> avec la méthode donnée ici
L<http://fr.wikibooks.org/wiki/Trouver_le_jour_de_la_semaine_avec_une_date_donn%C3%A9e>
=item 18/08/2009
Remplacement de C<my $date = 'date'> par localtime
=item 18/08/2009
Création du script
=item Big Bang
Création de l'univers connu :D
=back
=head1 Remerciements
Une grand merci à Nic0- (pseudo IRC) qui m'a beaucoup aidé dans la recherche de bug. Un grand merci aussi pour ses suggestions d'améliorations
tous les scripts que j'ai trouvé ne coloraient pas les jours comme celui-ci... des idées ?
Hors ligne
#762 Le 28/06/2011, à 12:19
- chepioq
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Pour le calendrier avec une police sans chasse fixe, il existe un script lua, mais la je ne suis pas chez moi, je le posterai ce soir...
Tout est dans tout et réciproquement....
Hors ligne
#763 Le 28/06/2011, à 17:07
- chepioq
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Voici le script lua pour le calendrier :
--[[Calendar Box by wlourf v.1.0 15/05/2010:
Parameters are explained with images on this page :
http://u-scripts.blogspot.com/2010/05/calendar-box.html
This widget draw a calendar in your conky.
You need conky 1.8.0+ to run it. and set theses conky settings:
own_window_transparent yes
own_window_argb_visual yes
In the conky, before TEXT section:
lua_load ~/scripts/calendar/calendar.lua
lua_draw_hook_pre calendar_box
]]
require 'cairo'
calendar_file= "/home/dominique/.conkyrc/conky15/calendar.txt"
function conky_calendar_box()
--settings are set in this table, cal_settings, 4 parameters are mandatory :
--w,y,font and font_size,
--others parameters are optionals
cal_settings={
{
x=120, --x of top left corner, relative to conky window
y=10, --y of top left corner, relative to conky window
font="URW Chancery L", --font to use
font_size=16, --font size to use
month_format="%B %Y", --month format, see http://www.lua.org/pil/22.1.html for available formats, default="%B"
days_number=2, --number of letters for days (monday ...), default = 1
days_position="t", -- position of boxes "Days" (t/b) top or bottom, default=t
month_position="t", -- position of box "Month" (t/b/l/r) top, bottom, left or right, default=t
two_digits=false, -- display numbers with two digits (true/false), default=false
alignment="c", -- alignment of days numbers (c/r/l), default= c
month_offset=0, -- month offset relative to actual month, default=0
display_others_days=false, --display days numbers of previous and next months, default=true
hpadding=1, --horizontal space beetween border and text, default=2 pixels
vpadding=0, --vertical space beetween border and text, default=2 pixels
border=0, --border size, default=0 pixels
gap=4, --space betwwen 2 boxes, default=2 pixels
radius=0, --radius of corners, default=0 pixels
--orientation ="nn", -- orientation of gradient, possibles values = nn, ne,ee,se,ss,sw,ww,nw, default="nn"
--gradient=0, --default linear(=0) or radial gradient percentage (0-1) of box side
--colors tables
--format for boxes {colour1, colour2, alpha1,alpha2,border1,border2,alpha border1,alpha border2}
--format for texts {colour1, colour2, alpha1,alpha2}
--colBox = {0xFFFFFF,0x0000FF,1,1,0x0000FF,0x00FFFF,0.5,0.5}, --color of standard box
colBoxText ={0x30BAFF,0x30BAFF,1,1}, --color of text numbers
colBoxTextOM = {0x000000,0x000000,0.0,0.5}, --color of numbers for other month
--colDays = {0xFFFFFF,0xFF0000,1,1,0x0000FF,0x00FF00,1,1}, --color of boxes "Days" (Monday ...)
colDaysText ={0x0003E5,0x09EFFF,1,1}, --color of days (Monday ...)
--colBoxTD = {0xFFFFFF,0x00FF00,1,1,0xFF00FF,0x00FF00,1,1}, --color of box "Today"
colBoxTextTD = {0xF21804,0xAA0B02,1,1}, --color of text "today"
--colBoxBH = {0xFFFFFF,0xFF0000,1,1,0xFF00FF,0x00FF00,1,1}, --color of box "Bank holiday"
colBoxTextBH = {0x30BAFF,0x30BAFF,1,1}, --color of text holiday
--colMonth = {0xFFFFFF,0x00FFFF,1,1,0x0000FF,0x00FF00,1,1}, --color of box "Month"
colMonthText = {0x0003E5,0x09EFFF,1,1}, --color of text "Month"
display_info_box=true, --affiche la boite info (default=false)
file_info="/tmp/info.txt", --read first line of this file and display it box "info"
--if file not found, use calendar.txt
--colInfo = {0xFF0000,0x0000FF,1,1,0x0000FF,0x00FFFF,0.5,0.5}, --color of box "info"
colInfoText = {0x30BAFF,0x30BAFF,1,1}, --color of text "info"
info_position="b", --position of box info (t/b/l/r) top, bottom, left or right, default=b
display_empty_info_box=true, --if no info to display , display or not info the box, default=false
},
}
--FIN DES PARAMETRES ------------------
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)
cr = cairo_create (cs)
for i,v in pairs(cal_settings) do
x,y=draw_calendar(v)
end
cairo_destroy(cr)
cairo_surface_destroy(cs)
end
function draw_square(cr,x,y,width,height,radius)
local degrees = math.pi / 180.0
radius=tonumber(radius)
cairo_new_sub_path (cr);
if radius>0 then
cairo_arc (cr, x + width - radius, y + radius, radius, -90 * degrees, 0 * degrees);
cairo_arc (cr, x + width - radius, y + height - radius, radius, 0 * degrees, 90 * degrees);
cairo_arc (cr, x + radius, y + height - radius, radius, 90 * degrees, 180 * degrees);
cairo_arc (cr, x + radius, y+ radius, radius, 180 * degrees, 270 * degrees);
else
cairo_rectangle(cr,x,y,width,height)
end
cairo_close_path (cr);
return
end
function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
function create_pattern(cr,x,y,w,h,tCol,orientation,gradient)
if gradient~=0 then
create_pattern_radial(cr,x,y,w,h,tCol,orientation,gradient)
else
create_pattern_linear(cr,x,y,w,h,tCol,orientation)
end
end
function create_pattern_linear(cr,x,y,w,h,tCol,orientation)
col0,col1,alpha0,alpha1=tCol[1],tCol[2],tCol[3],tCol[4]
if orientation=="nn" then
p={x+w/2,y,x+w/2,y+h}
elseif orientation=="ne" then
p={x+w,y,x,y+h}
elseif orientation=="ee" then
p={x+w,y+h/2,x,y+h/2}
elseif orientation=="se" then
p={x+w,y+h,x,y}
elseif orientation=="ss" then
p={x+w/2,y+h,x+w/2,y}
elseif orientation=="sw" then
p={x,y+h,x+w,y}
elseif orientation=="ww" then
p={x,y+h/2,x+w,y+h/2}
else
p={x,y,x+w,y+h}
end
local pat = cairo_pattern_create_linear (p[1],p[2],p[3],p[4])
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col0,alpha0))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col1,alpha1))
cairo_set_source (cr, pat)
cairo_pattern_destroy(pat)
end
function create_pattern_radial(cr,x,y,w,h,tCol,orientation,gradient)
local col0,col1,alpha0,alpha1=tCol[1],tCol[2],tCol[3],tCol[4]
local decn=gradient
local dec=1-decn
if orientation=="nn" then
p={x+w/2,y+h*decn}
elseif orientation=="ne" then
p={x+w*dec,y+h*decn}
elseif orientation=="ee" then
p={x+w*dec,y+h/2}
elseif orientation=="se" then
p={x+w*dec,y+h*dec}
elseif orientation=="ss" then
p={x+w/2,y+h*dec}
elseif orientation=="sw" then
p={x+w*decn,y+h*dec}
elseif orientation=="ww" then
p={x+w*decn,y+h/2}
else
p={x+w*(1-dec),y+h*(1-dec)}
end
local radius = w/dec
if h>w then radius=h/dec end
local pat = cairo_pattern_create_radial (p[1],p[2],0,p[1],p[2],radius)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col0,alpha0))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col1,alpha1));
cairo_set_source (cr, pat);
cairo_pattern_destroy(pat)
end
function draw_frame (x0,y0,width,height,tCol,radius,border,orientation,gradient)
cairo_set_operator(cr,CAIRO_OPERATOR_SOURCE)
create_pattern(cr,x0,y0,width,height,{tCol[5],tCol[6],tCol[7],tCol[8]},orientation,gradient)
draw_square(cr,x0,y0,width,height,radius)
cairo_set_line_width(cr,border)
cairo_fill (cr)
--cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
create_pattern(cr,x0,y0,width,height,{tCol[1],tCol[2],tCol[3],tCol[4]},orientation,gradient)
draw_square(cr,x0+border,y0+border,width-border*2,height-border*2,radius)
cairo_fill (cr)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
if tCol[2]>0 or tCol[3]>0 then
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
else
cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
end
create_pattern(cr,x0,y0,width,height,{tCol[1],tCol[2],tCol[3],tCol[4]},orientation,gradient)
draw_square(cr,x0+border,y0+border,width-border*2,height-border*2,radius)
cairo_fill (cr)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
end
function string:split(delimiter)
--source for the split function : http://www.wellho.net/resources/ex.php4?item=u108/split
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
function draw_calendar(t)
local te=cairo_text_extents_t:create()
if t.font==nil or t.x==nil or t.y == nil or t.font_size == nil then
print ("Error in settings")
return
end
--check values or set default values
x0,y0=t.x,t.y
if t.two_digits then str_format="%02d" else str_format="%d" end
if t.month_format==nil then t.month_format = "%B" end
if t.hpadding==nil then t.hpadding=2 end
if t.vpadding==nil then t.vpadding=2 end
if t.border==nil then t.border=0 end
if t.month_offset==nil then t.month_offset=0 end
if t.gap==nil then t.gap=2 end
if t.radius==nil then t.radius=0 end
if t.days_number==nil then t.days_number=1 end
if t.display_others_days==nil then t.display_others_days=true end
if t.gradient==nil then t.gradient=0 end
if t.display_info_box == nil then t.display_info_box=false end
if t.display_empty_info_box == nil then t.display_empty_info_box=false end
local orientation="nn"
for i,v in ipairs({"nn","ne","ee","se","ss","sw","ww","nw"}) do
if v==t.orientation then orientation=v end
end
local alignment ="c"
for i,v in ipairs({"l","c","r"}) do
if v==t.alignment then alignment=v end
end
local month_position="t"
for i,v in ipairs({"t","b","l","r"}) do
if v==t.month_position then month_position=v end
end
local days_position="t"
for i,v in ipairs({"t","b","l","r"}) do
if v==t.days_position then days_position=v end
end
local info_position="b"
for i,v in ipairs({"t","b","l","r"}) do
if v==t.info_position then info_position=v end
end
function table.copy(t)
local t2 = {}
for k,v in pairs(t) do
t2[k] = v
end
return t2
end
if t.colBox ~= nil and #t.colBox ~=8 then t.colBox=nil end
if t.colDays ~= nil and #t.colDays ~=8 then t.colDays=nil end
if t.colMonth ~= nil and#t.colMonth ~=8 then t.colMonth=nil end
if t.colBoxTD ~= nil and #t.colBoxTD ~=8 then t.colBoxTD=nil end
if t.colBoxBH ~= nil and #t.colBoxBH ~=8 then t.colBoxBH=nil end
if t.colInfo ~= nil and #t.colInfo ~=8 then t.colInfo=nil end
if t.colBoxText ~= nil and #t.colBoxText ~= 4 then t.colBoxText=nil end
if t.colBoxTextOM ~= nil and #t.colBoxTextOM ~=4 then t.colBoxText=nil end
if t.colBoxTextTD ~= nil and #t.colBoxTextTD ~= 4 then t.colBoxTextTD=nil end
if t.colDaysText ~= nil and #t.colDaysText ~= 4 then t.colDaysText=nil end
if t.colMonthText ~= nil and #t.colMonthText ~= 4 then t.colMonthText=nil end
if t.colInfoText ~= nil and #t.colInfoText ~= 4 then t.colInfoText=nil end
if t.colBox == nil then t.colBox = {0x000000,0xFFFFFF,0,0,0xFFFFFF,0x000000,0,0} end
if t.colDays == nil then t.colDays = table.copy(t.colBox) end
if t.colMonth == nil then t.colMonth = table.copy(t.colBox) end
if t.colInfo == nil then t.colInfo = t.colBox end
if t.colBoxTD == nil then t.colBoxTD = {t.colBox[2],t.colBox[1],t.colBox[3],t.colBox[4],t.colBox[6],t.colBox[5],t.colBox[7],t.colBox[8]}end
if t.colBoxBH == nil then t.colBoxBH = t.colBox end
if t.colBoxText == nil then t.colBoxText = {0x000000,0x000000,1,1} end
if t.colBoxTextOM == nil then t.colBoxTextOM = {0x00000,0x000000,0.2,0.2} end
if t.colBoxTextTD == nil then t.colBoxTextTD = {0x0000FF,0x0000FF,1,1} end
if t.colBoxTextBH == nil then t.colBoxTextBH = {0xFF0000,0xFF0000,1,1} end
if t.colDaysText == nil then t.colDaysText = {0x999999,0x999999,1,1} end
if t.colMonthText == nil then t.colMonthText = {0x333333,0x333333,1,1} end
if t.colInfoText == nil then t.colInfoText = {0x333333,0x333333,1,1} end
--calculate maximum size of a square
local maxSide=0
cairo_select_font_face(cr, t.font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr,t.font_size)
for d=1,31 do
cairo_text_extents (cr,string.format(str_format,d),te)
maxSide = math.max(maxSide,te.width+te.x_bearing+2*t.hpadding,te.height+te.y_bearing+2*t.vpadding)
end
maxSide=maxSide+2*t.border
-- Compute what day it was the first of the month (0=Monday)
-- from conky wiki
dtable = os.date("*t")
--this month table
mtable=dtable
mtable.month=dtable.month+t.month_offset
mtable = os.date("*t",os.time(mtable))
day,wday = mtable.day, mtable.wday
first_day = wday - 2 - (day-1) % 7
if first_day < 0 then first_day = first_day + 7 end
local txt_month = os.date(t.month_format, os.time(mtable))
txt_month = string.upper(string.sub(txt_month,1,1)) .. string.sub(txt_month,2)
function get_days_in_month(month, year)
local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
local d = days_in_month[month]
-- check for leap year
if (month == 2) then
if (math.mod(year,4) == 0) then
if (math.mod(year,100) == 0)then
if (math.mod(year,400) == 0) then
d = 29
end
else
d = 29
end
end
end
return d
end
last_day=get_days_in_month(mtable.month, mtable.year)
lpdtable=mtable
lpdtable.month=lpdtable.month-1
mtable = os.date("*t",os.time(lpdtable))
if lpdtable.month==0 then lpdtable.month=12 end
last_p_day=get_days_in_month(lpdtable.month,lpdtable.year)
mtable.month=lpdtable.month+1
mtable = os.date("*t",os.time(mtable))
--read the calendar file
local file = io.open(calendar_file,"r")
local tabcal={}
local idx=1
local line,lineok="",""
local txt_info=""
if file ~= nil then
while true do
line = file:read("*l")
if line == nil then break end
lineok = string.split(line,";")
if (#lineok)==3 then
tabcal[idx]={lineok[1],lineok[2],lineok[3]}
idx=idx+1
if lineok[1] == os.date("%m%d", os.time()) then
txt_info=lineok[3]
end
end
end
end
if not t.display_empty_info_box and txt_info=="" then
t.display_info_box =false
end
if not t.display_info_box then info_position="b" end
local nblines=idx-1
io.close()
--define text for days
tdays={}
for i=4,11 do
table.insert(tdays,os.date("%A", os.time{year=2010, month=1, day=i}))
end
for i=1,7 do
tdays[i]=string.upper(string.sub(tdays[i],1,1)) .. string.sub(tdays[i],2)
tdays[i]=(string.sub(tdays[i],1,math.max(t.days_number,1)))
end
local display_day=true
--draw numbers boxes
local flagEnd=0
d=0
for r=0,5 do
if flagEnd>0 then break end
for c=0,6 do
d=d+1
X=x0+c*maxSide+t.gap*c
Y=y0+r*maxSide+t.gap*r
if month_position=="t" then
Y=Y+maxSide+t.gap
elseif month_position=="l" then
X=X+maxSide+t.gap
end
if info_position=="t" then
Y=Y+maxSide+t.gap
elseif info_position=="l" then
X=X+maxSide+t.gap
end
if days_position=="t" then
Y=Y+maxSide+t.gap
end
--bank holiday or not ?
mtable.day=d-first_day
md = os.date("%m%d", os.time(mtable))
local flagBH = false
for idy=1,nblines do
if tabcal[idy][1] == md then
if tabcal[idy][2] == "1" then
flagBH = true
end
break
end
end
--draw frames
local colorBox=t.colBox
if dtable.day == d-first_day and t.month_offset==0 then
colorBox=t.colBoxTD
elseif flagBH then
colorBox=t.colBoxBH
end
draw_frame (X,Y,maxSide,maxSide,colorBox,t.radius,t.border,orientation,t.gradient)
--format _text
if d<=first_day then --days before
create_pattern(cr,X,Y,maxSide*(1-t.gradient),maxSide*(1-t.gradient),t.colBoxTextOM,orientation,t.gradient)
txt_date=last_p_day-first_day+d
display_day=t.display_others_days
elseif d-first_day>0 and d-first_day<=last_day then -- days of the month
txt_date=d-first_day
local colorText= t.colBoxText
if txt_date==dtable.day and t.month_offset==0 then
colorText=t.colBoxTextTD
elseif flagBH then
colorText=t.colBoxTextBH
end
create_pattern(cr,X,Y,maxSide*(1-t.gradient),maxSide*(1-t.gradient),colorText,orientation,t.gradient)
display_day=true
else --days after
txt_date=d-first_day-last_day
create_pattern(cr,X,Y,maxSide*(1-t.gradient),maxSide*(1-t.gradient),t.colBoxTextOM,orientation,t.gradient)
display_day=t.display_others_days
end
--show text or not
if display_day then
cairo_text_extents (cr,string.format(str_format,txt_date),te)
if alignment=="r" then
delta=maxSide-te.width-te.x_bearing-t.border-t.hpadding
elseif alignment=="c" then
delta=(maxSide-te.width)/2-te.x_bearing
else
delta=t.border+t.hpadding
end
if c==0 or d-first_day==1 then teheight= te.height end
cairo_move_to(cr,X+delta,Y+(maxSide)/2+teheight/2)
cairo_show_text(cr,string.format(str_format,txt_date))
end
if d-first_day>=last_day then
flagEnd=r
end
end
end
--show days (monday, thuesday ...)
if days_position=="t" then
Y=y0
if month_position=="t" then Y=Y+maxSide+t.gap end
if info_position=="t" then Y=Y+maxSide+t.gap end
else
Y=y0+(flagEnd+1)*(maxSide+t.gap)
end
deltaX=0
if month_position=="l" then deltaX=deltaX+maxSide+t.gap end
if info_position=="l" then deltaX=deltaX+maxSide+t.gap end
flagEnd=flagEnd+1
for c =0,6 do
X=x0+c*maxSide+t.gap*c+deltaX
draw_frame (X,Y,maxSide,maxSide,t.colDays,t.radius,t.border,orientation,t.gradient)
cairo_save(cr)
cairo_text_extents (cr,tdays[c+1],te)
local ratio=(maxSide-2*t.border-2*t.hpadding)/(te.width+te.x_bearing + t.border + t.hpadding)
if ratio>1 then ratio=1 end
local xm = X+t.hpadding+(maxSide-2*t.hpadding-te.width)/2-te.x_bearing--+t.hpadding/2
local ym = Y+(maxSide+te.height)/2
if ratio<1 then xm=X+t.border+t.hpadding end
if alignment=="r" then
delta=maxSide-te.width-te.x_bearing-t.border-t.hpadding
elseif alignment=="c" then
delta=(maxSide-te.width)/2-te.x_bearing
else
delta=t.border+t.hpadding
end
cairo_move_to(cr,xm,ym)
create_pattern(cr,X,Y,maxSide,maxSide,t.colDaysText,orientation,t.gradient)
cairo_save(cr)
cairo_scale(cr,ratio,1)
cairo_show_text(cr,tdays[c+1])
cairo_restore(cr)
end
function show_big_box(txt,box,position)
cairo_text_extents (cr,txt,te)
hbox={ width = maxSide*7+t.gap*6, height = maxSide}
vbox={ width = maxSide, height = maxSide*(flagEnd+1)+t.gap*flagEnd}
local deltaY = 0
local deltaX = 0
if box=="month" then
tColor=t.colMonth
tColorText=t.colMonthText
if info_position=="l" or info_position=="r" then
hbox={ width = maxSide*8+t.gap*7, height = maxSide}
end
if info_position=="l" then
deltaX = (maxSide+t.gap)
end
if info_position=="t" and month_position=="t" then
deltaY = (maxSide+t.gap)
end
if (month_position=="l" or month_position=="r") and (info_position=="t") then
deltaY=(maxSide+t.gap)
end
if (month_position=="b") and (info_position=="t") then
deltaY=(maxSide+t.gap)
end
elseif box=="info" then
tColor=t.colInfo
tColorText=t.colInfoText
if month_position=="l" or month_position=="r"then
hbox={ width = maxSide*8+t.gap*7, height = maxSide}
end
if month_position=="r" and info_position=="r" then
deltaX=(maxSide+t.gap)
end
if (month_position=="t") and (info_position=="l" or info_position=="r") then
deltaY=(maxSide+t.gap)
end
if (month_position=="t") and (info_position=="b") then
deltaY=(maxSide+t.gap)
end
if (month_position=="b") then
vbox={ width = maxSide, height = maxSide*(flagEnd)+t.gap*(flagEnd-1)}
end
else
return
end
if position=="b" then
flagEnd=flagEnd+1
draw_frame (x0,y0+flagEnd*(maxSide+t.gap)+deltaY,hbox.width,hbox.height,tColor,t.radius,t.border,orientation,t.gradient)
elseif position=="l" then
draw_frame (x0+deltaX,y0+deltaY,vbox.width, vbox.height,tColor,t.radius,t.border,orientation,t.gradient)
elseif position=="r" then
draw_frame (x0+7*(maxSide+t.gap)+deltaX,y0+deltaY,vbox.width,vbox.height,tColor,t.radius,t.border,orientation,t.gradient)
else
draw_frame (x0,y0+deltaY,hbox.width,hbox.height,tColor,t.radius,t.border,orientation,t.gradient)
end
if position=="t" or position=="b" then
cairo_save(cr)
local ratio=(hbox.width-2*t.border-2*t.hpadding)/(te.width + te.x_bearing)
if ratio>1 then ratio=1 end
local xm = x0+hbox.width/2-(te.width/2 + te.x_bearing)
local ym = y0+hbox.height/2-(te.height/2+ te.y_bearing)
if ratio<1 then xm=x0+t.border +t.hpadding end
y1=y0
if position=="b" then
ym = ym + flagEnd*(maxSide+t.gap)
y1 = y0 + flagEnd*(maxSide+t.gap)
end
create_pattern(cr,x0,y1 ,hbox.width,hbox.height,tColorText,orientation,t.gradient)
cairo_translate(cr,xm,ym+deltaY)
cairo_scale(cr,ratio,1)
cairo_show_text(cr,txt)
cairo_restore(cr)
end
if position=="l" or position=="r" then
cairo_save(cr)
--ajuster la taille, à faire avec cairo_set_scaled_font ??
local ratio=(vbox.height-2*t.border-2*t.hpadding)/(te.width + te.x_bearing)
if ratio>1 then ratio=1 end
local xm = x0+vbox.width/2-(te.height/2 + te.y_bearing)+deltaX
local ym = y0+vbox.height/2+(te.width/2+ te.x_bearing)
if ratio<1 then ym= y0 + vbox.height - t.border -t.hpadding end
if position=="r" then xm=xm + 7*(maxSide+t.gap) end
--hum hum ...
create_pattern(cr,xm-hbox.height+te.height,ym-te.width- te.x_bearing,hbox.height,te.width+ te.x_bearing,tColorText,orientation,t.gradient)
cairo_translate(cr,xm,ym+deltaY)
cairo_rotate(cr,-math.pi/2)
cairo_scale(cr,ratio,1)
cairo_show_text(cr,txt)
cairo_restore(cr)
end
end
local yZ=y0+(flagEnd+1)*(maxSide+t.gap)
show_big_box(txt_month,"month",month_position)
if month_position =="t" or month_position =="b" then yZ=yZ+(maxSide+t.gap) end
if t.display_info_box then
if t.file_info ~= nil then
local file = io.open(t.file_info,"r")
if file ~= nil then txt_info = file:read("*l") end
end
show_big_box(txt_info,"info",info_position)
if info_position =="t" or info_position =="b" then yZ=yZ+(maxSide+t.gap) end
end
return x0,yZ--X,Y
end
Il faut le lancer avec un conky avec, avant TEXT :
lua_load ~/scripts/calendar/calendar.lua
lua_draw_hook_pre calendar_box
et aprés TEXT, pour l'avoir en français :
${time %t}
lua_load ~/scripts/calendar/calendar.lua
lua_draw_hook_pre calendar_box
TEXT
${time %t}
Il faudra juste que tu changes les chemins
Avec ce calendrier tu peux aussi afficher des infos (genre anniversaires' ou ce que tu veux) avec un fichier calendar.txt qui aura cette forme :
#format of in this text file
#MMDD;N;TEXT
#MMDD = month day
#N = 0 or 1 (1 to display colours of bank holidays)
#TEXT = Text to display
0320;1;Anniversaire G...
0513;1;Anniversaire P...
0925;1;Anniversaire S...
1019;1;Anniversaire L...
1021;1;Anniversaire M...
1105;1;Anniversaire A...
Il faudra aussi indiquer le chemin de ce fichier (chez moi c'est la ligne calendar_file= "/home/dominique/.conkyrc/conky15/calendar.txt" au début du script lua).
Ce calendrier a été confectionné par wlourf, le roi du script lua, que je remercie encore pour son superbe travail.
Si il y a des choses que tu ne comprends pas n'hésites pas à demander.
Tout est dans tout et réciproquement....
Hors ligne
#764 Le 28/06/2011, à 18:00
- Frrout
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Ça y est ! Il m'a fallu un peu de temps pour réussir à l'afficher, mais ça marche (le calendrier était étonnement placé loin de l'écran... en jouant avec minimum_size dans conky, j'ai réussi à l'afficher où je voulais. C'est sûrement loin d'être propre, mais ça fonctionne.
Deux petits trucs : impossible de mettre de la transparence sur les box. J'ai bien mis l'alpha à 0,0 mais il reste toujours une box noire sous chaque élément. Quelque peu disgracieux !
Et ce que j'aimais bien dans mon autre calendrier, c'était avoir les week-ends colorés différemment. Sais-tu s'il est possible de le faire avec ce calendrier ?
Merci
Hors ligne
#765 Le 28/06/2011, à 18:19
- chepioq
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Ça y est ! Il m'a fallu un peu de temps pour réussir à l'afficher, mais ça marche (le calendrier était étonnement placé loin de l'écran... en jouant avec minimum_size dans conky, j'ai réussi à l'afficher où je voulais. C'est sûrement loin d'être propre, mais ça fonctionne.
Deux petits trucs : impossible de mettre de la transparence sur les box. J'ai bien mis l'alpha à 0,0 mais il reste toujours une box noire sous chaque élément. Quelque peu disgracieux !
Et ce que j'aimais bien dans mon autre calendrier, c'était avoir les week-ends colorés différemment. Sais-tu s'il est possible de le faire avec ce calendrier ?
Merci
Pour le soucis de la box noire sous chaque élément, essayes d'ajouter dans ton conky (pas dans le script lua), avant TEXT :
own_window_transparent yes
own_window_argb_visual yes
Pour avoir les weekends d'une couleur différente je ne crois pas que cela soit possible, il faudrait une option dans le script lua, mais je ne suis pas assez calé pour la trouver.
Si wlourf passe par ici, peut-être qu'il pourra nous aider.
Tout est dans tout et réciproquement....
Hors ligne
#766 Le 28/06/2011, à 19:17
- Frrout
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
ah ben je sais pas trop ce que j'ai fait, mais maintenant, tout le calendrier est sur fond noir !
mon conkyrc :
#background yes
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
#temperature_unit celsius
double_buffer yes
no_buffers yes
gap_x 10
gap_y 10
minimum_size 112 140
#maximum_width
own_window yes
own_window_type override
own_window_transparent yes
own_window_argb_visual yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
#border_inner_margin 2
#border_outer_margin 2
alignment br
#draw_shades no
#draw_outline no
#draw_borders no
#draw_graph_borders no
lua_load ~/.conky/calendrier.lua
lua_draw_hook_pre calendar_box
TEXT
${time %t}
et calendrier.lua :
--[[Calendar Box by wlourf v.1.0 15/05/2010:
Parameters are explained with images on this page :
http://u-scripts.blogspot.com/2010/05/calendar-box.html
This widget draw a calendar in your conky.
You need conky 1.8.0+ to run it. and set theses conky settings:
own_window_transparent yes
own_window_argb_visual yes
In the conky, before TEXT section:
lua_load ~/scripts/calendar/calendar.lua
lua_draw_hook_pre calendar_box
]]
require 'cairo'
calendar_file= "/home/frrout/.conky/calendar.txt"
function conky_calendar_box()
--settings are set in this table, cal_settings, 4 parameters are mandatory :
--w,y,font and font_size,
--others parameters are optionals
cal_settings={
{
-- x=120, --x of top left corner, relative to conky window
-- y=10, --y of top left corner, relative to conky window
x=0,
y=0,
font="caviar dreams", --font to use
font_size=9, --font size to use
month_format="%B %Y", --month format, see http://www.lua.org/pil/22.1.html for available formats, default="%B"
days_number=2, --number of letters for days (monday ...), default = 1
days_position="t", -- position of boxes "Days" (t/b) top or bottom, default=t
month_position="t", -- position of box "Month" (t/b/l/r) top, bottom, left or right, default=t
two_digits=false, -- display numbers with two digits (true/false), default=false
alignment="c", -- alignment of days numbers (c/r/l), default= c
month_offset=0, -- month offset relative to actual month, default=0
display_others_days=true, --display days numbers of previous and next months, default=true
hpadding=1, --horizontal space beetween border and text, default=2 pixels
vpadding=0, --vertical space beetween border and text, default=2 pixels
border=0, --border size, default=0 pixels
gap=4, --space betwwen 2 boxes, default=2 pixels
radius=0, --radius of corners, default=0 pixels
--orientation ="nn", -- orientation of gradient, possibles values = nn, ne,ee,se,ss,sw,ww,nw, default="nn"
--gradient=0, --default linear(=0) or radial gradient percentage (0-1) of box side
--colors tables
--format for boxes {colour1, colour2, alpha1,alpha2,border1,border2,alpha border1,alpha border2}
--format for texts {colour1, colour2, alpha1,alpha2}
colBox = {0xFFFFFF,0x0000FF,0,0,0x0000FF,0x00FFFF,0,0}, --color of standard box
colBoxText ={0xFF6600,0xFF6600,1,1}, --color of text numbers
colBoxTextOM = {0xFF6600,0xFF6600,0,0}, --color of numbers for other month
colDays = {0xFFFFFF,0xFF0000,0,0,0x0000FF,0x00FF00,0,0}, --color of boxes "Days" (Monday ...)
colDaysText ={0xCF4000,0xCF4000,1,1}, --color of days (Monday ...)
colBoxTD = {0xFFFFFF,0x00FF00,0,0,0xFF00FF,0x00FF00,0,0}, --color of box "Today"
colBoxTextTD = {0xFFFFFF,0xFFFFFF,1,1}, --color of text "today"
--colBoxBH = {0xFFFFFF,0xFF0000,1,1,0xFF00FF,0x00FF00,1,1}, --color of box "Bank holiday"
colBoxTextBH = {0x30BAFF,0x30BAFF,1,1}, --color of text holiday
colMonth = {0xFFFFFF,0x00FFFF,0,0,0x0000FF,0x00FF00,0,0}, --color of box "Month"
colMonthText = {0xFF6600,0xCF4000,1,1}, --color of text "Month"
display_info_box=true, --affiche la boite info (default=false)
file_info="/tmp/info.txt", --read first line of this file and display it box "info"
--if file not found, use calendar.txt
--colInfo = {0xFF0000,0x0000FF,1,1,0x0000FF,0x00FFFF,0.5,0.5}, --color of box "info"
colInfoText = {0xCF4000,0xCF4000,1,1}, --color of text "info"
info_position="b", --position of box info (t/b/l/r) top, bottom, left or right, default=b
display_empty_info_box=true, --if no info to display , display or not info the box, default=false
},
}
--FIN DES PARAMETRES ------------------
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)
cr = cairo_create (cs)
for i,v in pairs(cal_settings) do
x,y=draw_calendar(v)
end
cairo_destroy(cr)
cairo_surface_destroy(cs)
end
function draw_square(cr,x,y,width,height,radius)
local degrees = math.pi / 180.0
radius=tonumber(radius)
cairo_new_sub_path (cr);
if radius>0 then
cairo_arc (cr, x + width - radius, y + radius, radius, -90 * degrees, 0 * degrees);
cairo_arc (cr, x + width - radius, y + height - radius, radius, 0 * degrees, 90 * degrees);
cairo_arc (cr, x + radius, y + height - radius, radius, 90 * degrees, 180 * degrees);
cairo_arc (cr, x + radius, y+ radius, radius, 180 * degrees, 270 * degrees);
else
cairo_rectangle(cr,x,y,width,height)
end
cairo_close_path (cr);
return
end
function rgb_to_r_g_b(colour,alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
function create_pattern(cr,x,y,w,h,tCol,orientation,gradient)
if gradient~=0 then
create_pattern_radial(cr,x,y,w,h,tCol,orientation,gradient)
else
create_pattern_linear(cr,x,y,w,h,tCol,orientation)
end
end
function create_pattern_linear(cr,x,y,w,h,tCol,orientation)
col0,col1,alpha0,alpha1=tCol[1],tCol[2],tCol[3],tCol[4]
if orientation=="nn" then
p={x+w/2,y,x+w/2,y+h}
elseif orientation=="ne" then
p={x+w,y,x,y+h}
elseif orientation=="ee" then
p={x+w,y+h/2,x,y+h/2}
elseif orientation=="se" then
p={x+w,y+h,x,y}
elseif orientation=="ss" then
p={x+w/2,y+h,x+w/2,y}
elseif orientation=="sw" then
p={x,y+h,x+w,y}
elseif orientation=="ww" then
p={x,y+h/2,x+w,y+h/2}
else
p={x,y,x+w,y+h}
end
local pat = cairo_pattern_create_linear (p[1],p[2],p[3],p[4])
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col0,alpha0))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col1,alpha1))
cairo_set_source (cr, pat)
cairo_pattern_destroy(pat)
end
function create_pattern_radial(cr,x,y,w,h,tCol,orientation,gradient)
local col0,col1,alpha0,alpha1=tCol[1],tCol[2],tCol[3],tCol[4]
local decn=gradient
local dec=1-decn
if orientation=="nn" then
p={x+w/2,y+h*decn}
elseif orientation=="ne" then
p={x+w*dec,y+h*decn}
elseif orientation=="ee" then
p={x+w*dec,y+h/2}
elseif orientation=="se" then
p={x+w*dec,y+h*dec}
elseif orientation=="ss" then
p={x+w/2,y+h*dec}
elseif orientation=="sw" then
p={x+w*decn,y+h*dec}
elseif orientation=="ww" then
p={x+w*decn,y+h/2}
else
p={x+w*(1-dec),y+h*(1-dec)}
end
local radius = w/dec
if h>w then radius=h/dec end
local pat = cairo_pattern_create_radial (p[1],p[2],0,p[1],p[2],radius)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col0,alpha0))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col1,alpha1));
cairo_set_source (cr, pat);
cairo_pattern_destroy(pat)
end
function draw_frame (x0,y0,width,height,tCol,radius,border,orientation,gradient)
cairo_set_operator(cr,CAIRO_OPERATOR_SOURCE)
create_pattern(cr,x0,y0,width,height,{tCol[5],tCol[6],tCol[7],tCol[8]},orientation,gradient)
draw_square(cr,x0,y0,width,height,radius)
cairo_set_line_width(cr,border)
cairo_fill (cr)
--cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
create_pattern(cr,x0,y0,width,height,{tCol[1],tCol[2],tCol[3],tCol[4]},orientation,gradient)
draw_square(cr,x0+border,y0+border,width-border*2,height-border*2,radius)
cairo_fill (cr)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
if tCol[2]>0 or tCol[3]>0 then
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
else
cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
end
create_pattern(cr,x0,y0,width,height,{tCol[1],tCol[2],tCol[3],tCol[4]},orientation,gradient)
draw_square(cr,x0+border,y0+border,width-border*2,height-border*2,radius)
cairo_fill (cr)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
end
function string:split(delimiter)
--source for the split function : http://www.wellho.net/resources/ex.php4?item=u108/split
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
function draw_calendar(t)
local te=cairo_text_extents_t:create()
if t.font==nil or t.x==nil or t.y == nil or t.font_size == nil then
print ("Error in settings")
return
end
--check values or set default values
x0,y0=t.x,t.y
if t.two_digits then str_format="%02d" else str_format="%d" end
if t.month_format==nil then t.month_format = "%B" end
if t.hpadding==nil then t.hpadding=2 end
if t.vpadding==nil then t.vpadding=2 end
if t.border==nil then t.border=0 end
if t.month_offset==nil then t.month_offset=0 end
if t.gap==nil then t.gap=2 end
if t.radius==nil then t.radius=0 end
if t.days_number==nil then t.days_number=1 end
if t.display_others_days==nil then t.display_others_days=true end
if t.gradient==nil then t.gradient=0 end
if t.display_info_box == nil then t.display_info_box=false end
if t.display_empty_info_box == nil then t.display_empty_info_box=false end
local orientation="nn"
for i,v in ipairs({"nn","ne","ee","se","ss","sw","ww","nw"}) do
if v==t.orientation then orientation=v end
end
local alignment ="c"
for i,v in ipairs({"l","c","r"}) do
if v==t.alignment then alignment=v end
end
local month_position="t"
for i,v in ipairs({"t","b","l","r"}) do
if v==t.month_position then month_position=v end
end
local days_position="t"
for i,v in ipairs({"t","b","l","r"}) do
if v==t.days_position then days_position=v end
end
local info_position="b"
for i,v in ipairs({"t","b","l","r"}) do
if v==t.info_position then info_position=v end
end
function table.copy(t)
local t2 = {}
for k,v in pairs(t) do
t2[k] = v
end
return t2
end
if t.colBox ~= nil and #t.colBox ~=8 then t.colBox=nil end
if t.colDays ~= nil and #t.colDays ~=8 then t.colDays=nil end
if t.colMonth ~= nil and#t.colMonth ~=8 then t.colMonth=nil end
if t.colBoxTD ~= nil and #t.colBoxTD ~=8 then t.colBoxTD=nil end
if t.colBoxBH ~= nil and #t.colBoxBH ~=8 then t.colBoxBH=nil end
if t.colInfo ~= nil and #t.colInfo ~=8 then t.colInfo=nil end
if t.colBoxText ~= nil and #t.colBoxText ~= 4 then t.colBoxText=nil end
if t.colBoxTextOM ~= nil and #t.colBoxTextOM ~=4 then t.colBoxText=nil end
if t.colBoxTextTD ~= nil and #t.colBoxTextTD ~= 4 then t.colBoxTextTD=nil end
if t.colDaysText ~= nil and #t.colDaysText ~= 4 then t.colDaysText=nil end
if t.colMonthText ~= nil and #t.colMonthText ~= 4 then t.colMonthText=nil end
if t.colInfoText ~= nil and #t.colInfoText ~= 4 then t.colInfoText=nil end
if t.colBox == nil then t.colBox = {0x000000,0xFFFFFF,0,0,0xFFFFFF,0x000000,0,0} end
if t.colDays == nil then t.colDays = table.copy(t.colBox) end
if t.colMonth == nil then t.colMonth = table.copy(t.colBox) end
if t.colInfo == nil then t.colInfo = t.colBox end
if t.colBoxTD == nil then t.colBoxTD = {t.colBox[2],t.colBox[1],t.colBox[3],t.colBox[4],t.colBox[6],t.colBox[5],t.colBox[7],t.colBox[8]}end
if t.colBoxBH == nil then t.colBoxBH = t.colBox end
if t.colBoxText == nil then t.colBoxText = {0x000000,0x000000,1,1} end
if t.colBoxTextOM == nil then t.colBoxTextOM = {0x00000,0x000000,0.2,0.2} end
if t.colBoxTextTD == nil then t.colBoxTextTD = {0x0000FF,0x0000FF,1,1} end
if t.colBoxTextBH == nil then t.colBoxTextBH = {0xFF0000,0xFF0000,1,1} end
if t.colDaysText == nil then t.colDaysText = {0x999999,0x999999,1,1} end
if t.colMonthText == nil then t.colMonthText = {0x333333,0x333333,1,1} end
if t.colInfoText == nil then t.colInfoText = {0x333333,0x333333,1,1} end
--calculate maximum size of a square
local maxSide=0
cairo_select_font_face(cr, t.font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cr,t.font_size)
for d=1,31 do
cairo_text_extents (cr,string.format(str_format,d),te)
maxSide = math.max(maxSide,te.width+te.x_bearing+2*t.hpadding,te.height+te.y_bearing+2*t.vpadding)
end
maxSide=maxSide+2*t.border
-- Compute what day it was the first of the month (0=Monday)
-- from conky wiki
dtable = os.date("*t")
--this month table
mtable=dtable
mtable.month=dtable.month+t.month_offset
mtable = os.date("*t",os.time(mtable))
day,wday = mtable.day, mtable.wday
first_day = wday - 2 - (day-1) % 7
if first_day < 0 then first_day = first_day + 7 end
local txt_month = os.date(t.month_format, os.time(mtable))
txt_month = string.upper(string.sub(txt_month,1,1)) .. string.sub(txt_month,2)
function get_days_in_month(month, year)
local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
local d = days_in_month[month]
-- check for leap year
if (month == 2) then
if (math.mod(year,4) == 0) then
if (math.mod(year,100) == 0)then
if (math.mod(year,400) == 0) then
d = 29
end
else
d = 29
end
end
end
return d
end
last_day=get_days_in_month(mtable.month, mtable.year)
lpdtable=mtable
lpdtable.month=lpdtable.month-1
mtable = os.date("*t",os.time(lpdtable))
if lpdtable.month==0 then lpdtable.month=12 end
last_p_day=get_days_in_month(lpdtable.month,lpdtable.year)
mtable.month=lpdtable.month+1
mtable = os.date("*t",os.time(mtable))
--read the calendar file
local file = io.open(calendar_file,"r")
local tabcal={}
local idx=1
local line,lineok="",""
local txt_info=""
if file ~= nil then
while true do
line = file:read("*l")
if line == nil then break end
lineok = string.split(line,";")
if (#lineok)==3 then
tabcal[idx]={lineok[1],lineok[2],lineok[3]}
idx=idx+1
if lineok[1] == os.date("%m%d", os.time()) then
txt_info=lineok[3]
end
end
end
end
if not t.display_empty_info_box and txt_info=="" then
t.display_info_box =false
end
if not t.display_info_box then info_position="b" end
local nblines=idx-1
io.close()
--define text for days
tdays={}
for i=4,11 do
table.insert(tdays,os.date("%A", os.time{year=2010, month=1, day=i}))
end
for i=1,7 do
tdays[i]=string.upper(string.sub(tdays[i],1,1)) .. string.sub(tdays[i],2)
tdays[i]=(string.sub(tdays[i],1,math.max(t.days_number,1)))
end
local display_day=true
--draw numbers boxes
local flagEnd=0
d=0
for r=0,5 do
if flagEnd>0 then break end
for c=0,6 do
d=d+1
X=x0+c*maxSide+t.gap*c
Y=y0+r*maxSide+t.gap*r
if month_position=="t" then
Y=Y+maxSide+t.gap
elseif month_position=="l" then
X=X+maxSide+t.gap
end
if info_position=="t" then
Y=Y+maxSide+t.gap
elseif info_position=="l" then
X=X+maxSide+t.gap
end
if days_position=="t" then
Y=Y+maxSide+t.gap
end
--bank holiday or not ?
mtable.day=d-first_day
md = os.date("%m%d", os.time(mtable))
local flagBH = false
for idy=1,nblines do
if tabcal[idy][1] == md then
if tabcal[idy][2] == "1" then
flagBH = true
end
break
end
end
--draw frames
local colorBox=t.colBox
if dtable.day == d-first_day and t.month_offset==0 then
colorBox=t.colBoxTD
elseif flagBH then
colorBox=t.colBoxBH
end
draw_frame (X,Y,maxSide,maxSide,colorBox,t.radius,t.border,orientation,t.gradient)
--format _text
if d<=first_day then --days before
create_pattern(cr,X,Y,maxSide*(1-t.gradient),maxSide*(1-t.gradient),t.colBoxTextOM,orientation,t.gradient)
txt_date=last_p_day-first_day+d
display_day=t.display_others_days
elseif d-first_day>0 and d-first_day<=last_day then -- days of the month
txt_date=d-first_day
local colorText= t.colBoxText
if txt_date==dtable.day and t.month_offset==0 then
colorText=t.colBoxTextTD
elseif flagBH then
colorText=t.colBoxTextBH
end
create_pattern(cr,X,Y,maxSide*(1-t.gradient),maxSide*(1-t.gradient),colorText,orientation,t.gradient)
display_day=true
else --days after
txt_date=d-first_day-last_day
create_pattern(cr,X,Y,maxSide*(1-t.gradient),maxSide*(1-t.gradient),t.colBoxTextOM,orientation,t.gradient)
display_day=t.display_others_days
end
--show text or not
if display_day then
cairo_text_extents (cr,string.format(str_format,txt_date),te)
if alignment=="r" then
delta=maxSide-te.width-te.x_bearing-t.border-t.hpadding
elseif alignment=="c" then
delta=(maxSide-te.width)/2-te.x_bearing
else
delta=t.border+t.hpadding
end
if c==0 or d-first_day==1 then teheight= te.height end
cairo_move_to(cr,X+delta,Y+(maxSide)/2+teheight/2)
cairo_show_text(cr,string.format(str_format,txt_date))
end
if d-first_day>=last_day then
flagEnd=r
end
end
end
--show days (monday, thuesday ...)
if days_position=="t" then
Y=y0
if month_position=="t" then Y=Y+maxSide+t.gap end
if info_position=="t" then Y=Y+maxSide+t.gap end
else
Y=y0+(flagEnd+1)*(maxSide+t.gap)
end
deltaX=0
if month_position=="l" then deltaX=deltaX+maxSide+t.gap end
if info_position=="l" then deltaX=deltaX+maxSide+t.gap end
flagEnd=flagEnd+1
for c =0,6 do
X=x0+c*maxSide+t.gap*c+deltaX
draw_frame (X,Y,maxSide,maxSide,t.colDays,t.radius,t.border,orientation,t.gradient)
cairo_save(cr)
cairo_text_extents (cr,tdays[c+1],te)
local ratio=(maxSide-2*t.border-2*t.hpadding)/(te.width+te.x_bearing + t.border + t.hpadding)
if ratio>1 then ratio=1 end
local xm = X+t.hpadding+(maxSide-2*t.hpadding-te.width)/2-te.x_bearing--+t.hpadding/2
local ym = Y+(maxSide+te.height)/2
if ratio<1 then xm=X+t.border+t.hpadding end
if alignment=="r" then
delta=maxSide-te.width-te.x_bearing-t.border-t.hpadding
elseif alignment=="c" then
delta=(maxSide-te.width)/2-te.x_bearing
else
delta=t.border+t.hpadding
end
cairo_move_to(cr,xm,ym)
create_pattern(cr,X,Y,maxSide,maxSide,t.colDaysText,orientation,t.gradient)
cairo_save(cr)
cairo_scale(cr,ratio,1)
cairo_show_text(cr,tdays[c+1])
cairo_restore(cr)
end
function show_big_box(txt,box,position)
cairo_text_extents (cr,txt,te)
hbox={ width = maxSide*7+t.gap*6, height = maxSide}
vbox={ width = maxSide, height = maxSide*(flagEnd+1)+t.gap*flagEnd}
local deltaY = 0
local deltaX = 0
if box=="month" then
tColor=t.colMonth
tColorText=t.colMonthText
if info_position=="l" or info_position=="r" then
hbox={ width = maxSide*8+t.gap*7, height = maxSide}
end
if info_position=="l" then
deltaX = (maxSide+t.gap)
end
if info_position=="t" and month_position=="t" then
deltaY = (maxSide+t.gap)
end
if (month_position=="l" or month_position=="r") and (info_position=="t") then
deltaY=(maxSide+t.gap)
end
if (month_position=="b") and (info_position=="t") then
deltaY=(maxSide+t.gap)
end
elseif box=="info" then
tColor=t.colInfo
tColorText=t.colInfoText
if month_position=="l" or month_position=="r"then
hbox={ width = maxSide*8+t.gap*7, height = maxSide}
end
if month_position=="r" and info_position=="r" then
deltaX=(maxSide+t.gap)
end
if (month_position=="t") and (info_position=="l" or info_position=="r") then
deltaY=(maxSide+t.gap)
end
if (month_position=="t") and (info_position=="b") then
deltaY=(maxSide+t.gap)
end
if (month_position=="b") then
vbox={ width = maxSide, height = maxSide*(flagEnd)+t.gap*(flagEnd-1)}
end
else
return
end
if position=="b" then
flagEnd=flagEnd+1
draw_frame (x0,y0+flagEnd*(maxSide+t.gap)+deltaY,hbox.width,hbox.height,tColor,t.radius,t.border,orientation,t.gradient)
elseif position=="l" then
draw_frame (x0+deltaX,y0+deltaY,vbox.width, vbox.height,tColor,t.radius,t.border,orientation,t.gradient)
elseif position=="r" then
draw_frame (x0+7*(maxSide+t.gap)+deltaX,y0+deltaY,vbox.width,vbox.height,tColor,t.radius,t.border,orientation,t.gradient)
else
draw_frame (x0,y0+deltaY,hbox.width,hbox.height,tColor,t.radius,t.border,orientation,t.gradient)
end
if position=="t" or position=="b" then
cairo_save(cr)
local ratio=(hbox.width-2*t.border-2*t.hpadding)/(te.width + te.x_bearing)
if ratio>1 then ratio=1 end
local xm = x0+hbox.width/2-(te.width/2 + te.x_bearing)
local ym = y0+hbox.height/2-(te.height/2+ te.y_bearing)
if ratio<1 then xm=x0+t.border +t.hpadding end
y1=y0
if position=="b" then
ym = ym + flagEnd*(maxSide+t.gap)
y1 = y0 + flagEnd*(maxSide+t.gap)
end
create_pattern(cr,x0,y1 ,hbox.width,hbox.height,tColorText,orientation,t.gradient)
cairo_translate(cr,xm,ym+deltaY)
cairo_scale(cr,ratio,1)
cairo_show_text(cr,txt)
cairo_restore(cr)
end
if position=="l" or position=="r" then
cairo_save(cr)
--ajuster la taille, à faire avec cairo_set_scaled_font ??
local ratio=(vbox.height-2*t.border-2*t.hpadding)/(te.width + te.x_bearing)
if ratio>1 then ratio=1 end
local xm = x0+vbox.width/2-(te.height/2 + te.y_bearing)+deltaX
local ym = y0+vbox.height/2+(te.width/2+ te.x_bearing)
if ratio<1 then ym= y0 + vbox.height - t.border -t.hpadding end
if position=="r" then xm=xm + 7*(maxSide+t.gap) end
--hum hum ...
create_pattern(cr,xm-hbox.height+te.height,ym-te.width- te.x_bearing,hbox.height,te.width+ te.x_bearing,tColorText,orientation,t.gradient)
cairo_translate(cr,xm,ym+deltaY)
cairo_rotate(cr,-math.pi/2)
cairo_scale(cr,ratio,1)
cairo_show_text(cr,txt)
cairo_restore(cr)
end
end
local yZ=y0+(flagEnd+1)*(maxSide+t.gap)
show_big_box(txt_month,"month",month_position)
if month_position =="t" or month_position =="b" then yZ=yZ+(maxSide+t.gap) end
if t.display_info_box then
if t.file_info ~= nil then
local file = io.open(t.file_info,"r")
if file ~= nil then txt_info = file:read("*l") end
end
show_big_box(txt_info,"info",info_position)
if info_position =="t" or info_position =="b" then yZ=yZ+(maxSide+t.gap) end
end
return x0,yZ--X,Y
end
je suis un peu perdu...
Hors ligne
#767 Le 28/06/2011, à 19:20
- chepioq
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Essaye en commentant la ligne de ton conky own_window_type override
own_window yes
#own_window_type override
own_window_transparent yes
own_window_argb_visual yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
Tout est dans tout et réciproquement....
Hors ligne
#768 Le 28/06/2011, à 19:52
- Frrout
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Pfff, c'était aussi simple que ça ?!
j'avoue, je ne comprends pas du tout les lignes window de conky !
Merci beaucoup chepioq !
Hors ligne
#769 Le 28/06/2011, à 20:00
- Fenouille84
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Voici une petite MAJ après une longue période d'absence !
conkyrc1 (haut gauche)
[== Conky ==]
#Fonctionnement de conky
total_run_times 0 #Temps en secondes ; 0 = toujours actif
background yes #Pour que conky tourne en arrière plan ; no = pour les tests
#Réglages système
cpu_avg_samples 1 #Nb d'échantillons pour calculer la moyenne d'utilisation CPU
net_avg_samples 2 #Nb d'échantillons pour calculer la moyenne d'utilisation CPU
#Mémoire
double_buffer yes #Éviter le clignotement
no_buffers yes #Soustraire les mémoires tampons de la mémoire utilisée
text_buffer_size 1024 #Taille du cache pour le texte
#Affichage
out_to_console no #Affiche le texte sur la sortie standard
update_interval 1 #Taux de rafraîchissement de la fenêtre (s)
#Fenêtre conky
alignment top_left #Alignement
#---
minimum_size 330 10 #Taille minimum (px) ; largeur / hauteur
maximum_width 330 #Largeur maximum (px)
#---
gap_x 2 #Écart avec le bord gauche / droit
gap_y 11 #Écart avec le bord haut / bas
#---
draw_shades no #Afficher les ombres
draw_outline no #Afficher les contours de fenêtre
draw_borders no #Afficher des contours autour des blocs de texte
border_width 1 #Largeur du contour
border_inner_margin 1 #Largeur des marges
#---
own_window yes #Utiliser sa propre fenêtre
own_window_type override #Type de fenêtre ; normal / override / desktop
own_window_transparent yes #Pseudo transparence
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
#Mise en forme
use_xft yes #Utiliser Xft (polices lissées etc)
xftalpha 1 #Utiliser Xft
override_utf8_locale yes #Force l'UTF8
uppercase no #Tout le texte en majuscule
use_spacer right #Ajoute des espaces après certains objets (qu'avec des polices fixes)
#---
xftfont sans:size=9 #Police par défaut
#xftfont saxMono:size=9 #Police par défaut
#---
default_bar_size 51 3 #Barre par défaut (longeur hauteur)
stippled_borders 3 #Taille des pointillés
#Couleurs
default_color FFFFFF #Couleur par défaut
default_shade_color 333333 #Couleur des ombres
default_outline_color black #Couleur des contours
#---
color1 435967 #Gris
#---
short_units yes #Unités courtes
pad_percents 2 #Unité à 2 décimales
top_name_width 6 #Largeur des processus
#LUA : Clock
#lua_load $HOME/conky/Script/clock.lua
#lua_draw_hook_pre clock_rings
#LUA : Background
#lua_load $HOME/conky/Script/bg.lua
#lua_draw_hook_pre draw_bg
#LUA : Calendar
#lua_load $HOME/conky/Script/calendrier.lua
#lua_draw_hook_pre widgets
TEXT
${color1}${offset -3}${voffset -8}${cpugraph cpu6 22,335}${voffset -28}
${offset 5}Cpu : ${cpu cpu0}%${goto 91}Ram : ${memperc}%${goto 181}/r : ${fs_free /}${goto 263}/h : ${fs_free /home}${voffset -7}
conkyrc2 (droite)
[== Conky ==]
#Fonctionnement de conky
total_run_times 0 #Temps en secondes ; 0 = toujours actif
background yes #Pour que conky tourne en arrière plan ; no = pour les tests
#Réglages système
cpu_avg_samples 1 #Nb d'échantillons pour calculer la moyenne d'utilisation CPU
net_avg_samples 2 #Nb d'échantillons pour calculer la moyenne d'utilisation CPU
#Mémoire
double_buffer yes #Éviter le clignotement
no_buffers yes #Soustraire les mémoires tampons de la mémoire utilisée
text_buffer_size 1024 #Taille du cache pour le texte
#Affichage
out_to_console no #Affiche le texte sur la sortie standard
update_interval 1 #Taux de rafraîchissement de la fenêtre (s)
#Fenêtre conky
alignment top_right #Alignement
#---
minimum_size 100 10 #Taille minimum (px) ; largeur / hauteur
maximum_width 100 #Largeur maximum (px)
#---
gap_x 5 #Écart avec le bord gauche / droit
gap_y 40 #Écart avec le bord haut / bas
#---
draw_shades no #Afficher les ombres
draw_outline no #Afficher les contours de fenêtre
draw_borders no #Afficher des contours autour des blocs de texte
border_width 1 #Largeur du contour
border_inner_margin 1 #Largeur des marges
#---
own_window yes #Utiliser sa propre fenêtre
own_window_type normal #Type de fenêtre ; normal / override / desktop
own_window_transparent yes #Pseudo transparence
own_window_hints undecorated,sticky,skip_taskbar,skip_pager
#Mise en forme
use_xft yes #Utiliser Xft (polices lissées etc)
xftalpha 0.1 #Utiliser Xft
override_utf8_locale yes #Force l'UTF8
uppercase no #Tout le texte en majuscule
use_spacer right #Ajoute des espaces après certains objets (qu'avec des polices fixes)
#---
xftfont sans:size=9 #Police par défaut
#---
default_bar_size 100 3 #Barre par défaut (longeur hauteur)
stippled_borders 3 #Taille des pointillés
#Couleurs
default_color FFFFFF #Couleur par défaut
default_shade_color 333333 #Couleur des ombres
default_outline_color black #Couleur des contours
#---
color1 094661 #Gris
#---
short_units yes #Unités courtes
pad_percents 2 #Unité à 2 décimales
#LUA : Clock
#lua_load $HOME/conky/Script/clock.lua
#lua_draw_hook_pre clock_rings
#LUA : Background
#lua_load $HOME/conky/Script/bg.lua
#lua_draw_hook_pre draw_bg
#LUA : Calendar
#lua_load $HOME/conky/Script/calendrier.lua
#lua_draw_hook_pre widgets
TEXT
${voffset -11}${color1}${hr}${if_match ${execp ls /media | wc -l} > 0}
${execp grep -E ^\/dev /etc/mtab | cut -d " " -f2 | sed '1,2d ; s&^.*/&&g ; s/040/ /g' | while read line ; do name=$(echo $line | cut -c '1-5' | sed 's/.*/\L&/g ; s/^./\U&/g') ; echo $name'${alignr}${fs_free /media/'$line'}
${fs_bar /media/'$line'}' ; done}${voffset -7}
${stippled_hr}${else}${endif}
Up${alignr}${uptime_short}
HDD${alignr}${hddtemp /dev/sda}°C
Cpu1${alignr}${platform coretemp.0 temp 1}°C
Cpu2${alignr}${platform coretemp.1 temp 1}°C
${hr}
## Partie sur la météo
Pour les scripts météo et leur utilisation, voir la doc appropriée sur Ubuntu-fr
Ma page Deviant Art : conky inside ;-)
.
-- DropBox (online backup) : 2Go + 250 Mo pour vous et moi par parrainage --
Hors ligne
#770 Le 28/06/2011, à 20:05
- chepioq
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
own_window_type
if own_window is yes, you may specify type normal, desktop, dock, panel or override (default: normal). Desktop windows are special windows that have no window decorations; are always visible on your desktop; do not appear in your pager or taskbar; and are sticky across all workspaces. Panel windows reserve space along a desktop edge, just like panels and taskbars, preventing maximized windows from overlapping them. The edge is chosen based on the alignment option. Override windows are not under the control of the window manager. Hints are ignored. This type of window can be useful for certain situations.
Sinon tu peux consulter ici : http://conky.sourceforge.net/config_settings.html pour avoir tous les renseignements sur les settings de conky (la partie avant TEXT).
Et ici http://conky.sourceforge.net/variables.html pour les variables (la partie après TEXT).
Dernière modification par chepioq (Le 28/06/2011, à 20:06)
Tout est dans tout et réciproquement....
Hors ligne
#771 Le 01/07/2011, à 19:16
- usm77
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
merci fanou18000
J'ai fat des améliorations sur l'ensemble des conky , le plus important concerne la météo, au lieu d'utiliser les fontes "ConkyWeather pour afficher les icônes météo, j'ai utilisé ${image} dans conkyforecast.template
C'est super il fait beau les prochains jours
L'autre modification est d'avoir rajouter les icones dans la partie système
mon conkyforecast.template pour ceux que cela intéressent
${voffset 5}${goto 10}${font ConkyWeather:style=Bold:size=40}${image [--datatype=WI] -p 0,30 -s 70x70}${font}
${image $HOME/conky/pix/thermo1.png -p 0,110 -s 40x40}${goto 60}${voffset 15}${font Bitstream Vera Sans Mono:style=Bold:size=16}[--datatype=HT --hideunits --centeredwidth=3]${font}
#/[--datatype=LT --hideunits --centeredwidth=3]
${voffset 10}${goto 10}${image [--datatype=BI] -p 0,170 -s 45x45}${goto 50}${voffset 25}${font Bitstream Vera Sans Mono:style=Bold:size=12}[--datatype=WS --imperial]
${goto 50}${font Bitstream Vera Sans Mono:style=Bold:size=12} [--datatype=WD]${font} ${voffset -175}${goto 100}${color1}${font Bitstream Vera Sans Mono:style=Bold:size=15 les t}[--datatype=CT]${font}# datatype OB=Station / CN=Ville
${voffset 20}${goto 120}${color6}Ville : $alignr${color1}[--datatype=CN]
${goto 120}${color6}Précipitations : $alignr${color1}[--datatype=PC --startday=0]
${goto 120}${color6}UV : $alignr${color1}[--datatype=UI] - [--datatype=UT]
${goto 120}${color6}Humidité : $alignr${color1}[--datatype=HM]
${goto 120}${color6}Point de rosée : $alignr${color1}[--datatype=DP]
${goto 120}${color6}Lever/Coucher : $alignr${color1}[--datatype=SR] / [--datatype=SS]
${goto 120}${color6}Pression : $alignr${color1}[--datatype=BR] - [--datatype=BD]
${goto 120}${color6}Lune : $alignr${color1}[--datatype=MP]
${color yellow}${voffset 40}${goto 25}[--datatype=DW --startday=1 --shortweekday]${offset 55}[--datatype=DW --startday=2 --shortweekday]${offset 55}[--datatype=DW --startday=3 --shortweekday] ${offset 55}[--datatype=DW --startday=4 --shortweekday]
${goto 30}${image [--datatype=WI --startday=1] -p 10,290 -s 45x45}
${goto 30}${image [--datatype=WI --startday=2] -p 85,290 -s 45x45}
${goto 30}${image [--datatype=WI --startday=3] -p 160,290 -s 45x45}
${goto 30}${image [--datatype=WI --startday=4] -p 235,290 -s 45x45}
${goto 15}[--datatype=HT --startday=1 --hideunits --centeredwidth=3]/[--datatype=LT --startday=1 --hideunits --centeredwidth=3]${goto 90}[--datatype=HT --startday=2 --hideunits --centeredwidth=3]/[--datatype=LT --startday=2 --hideunits --centeredwidth=3]${goto 170}[--datatype=HT --startday=3 --hideunits --centeredwidth=3]/[--datatype=LT --startday=3 --hideunits --centeredwidth=3]${goto 245}[--datatype=HT --startday=4 --hideunits --centeredwidth=3]/[--datatype=LT --startday=4 --hideunits --centeredwidth=3]
${image [--datatype=MI] -p 70,220 -s 35x35}
$alignc${color6}${font Bitstream Vera Sans Mono:size=9}Dernière mise à jour: [--datatype=LU]${font}]
L'appel dans le conkyrc (météo)
${execpi 1800 conkyForecast --location=FRIF0610 --template=$HOME/conky/conkyForecast.template}
J'ai par contre un problème concernant la messagerie ; sur gmail pas de soucis mais par contre sur yahoo au lieu d'avoir n message non lu je me retrouve avec la totalité des messages comme non lus, j'utilise ce code
${pop3_unseen pop.mail.yahoo.fr UserName Password -p 995} message(s) non lu(s)
pour la réception. J'ai essayé des scripts python, shell mais toujours le même problème, je pense que cela vient plutôt de mon serveur de messagerie
mais ou est ce problème, si quelqu'un a une idée je suis preneur, merci par avance pour une idée ou une solution
Dernière modification par usm77 (Le 01/07/2011, à 19:30)
Hors ligne
#772 Le 04/07/2011, à 10:52
- usm77
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Nouvelle modification
J'ai peaufiné mon conky multimédia, de façon a avoir le choix du lecteur, soit Amarok, soit Rhythmbox, soit Banshee mais mon script me parait assez lourd, si quelqu'un à une manière plus simple de le traiter, je suis preneur.
Voici la partie concernée :
######## Amarok ########
${if_running amarok}${image $HOME/conky/pix/separateurH.png -p -1,0 -s 540x25}$alignc${color black}${voffset 2}${font URW Chancery L:style=Medium Italic:pixelsize=18}Amarok${font}${color4}
${execi 10 coverart jewel bw}${image /tmp/cover/cover.png -p 395,40 -s 123x100}${voffset 5}${color2}Piste${goto 65}${color1}${execi 10 askamarok2 activePlay}${color2}/${color1}${execi 10 askamarok2 totPlaylist}${goto 175}${color2}Jouer ${color1}${execi 1 askamarok2 playCount}${goto 315}${color2}score${color1} ${execi 10 askamarok2 score}
${color2}titre${color1}${goto 65}${execi 10 askamarok2 title}
${color2}artiste${color1}${goto 65}${execi 10 askamarok2 artist}
${color2}album${color1}${goto 65}${execi 10 askamarok2 album}
${color2}Genre${color1}${goto 65}${execi 10 askamarok2 genre}${goto 260}${color2}année${color1}${offset 10}${execi 10 askamarok2 year}
${voffset 5}${goto 55}${execi 1 askamarok2 currentTime}${goto 110}${voffset 2}${execibar 1 askamarok2 progress}${voffset -2}${goto 385}${execi 1 askamarok2 totalTime}
${hr}
######## Rhythmbox ########
${else}${if_running rhythmbox}${image $HOME/conky/pix/separateurH.png -p -1,0 -s 540x25}$alignc${color black}${voffset 2}${font URW Chancery L:style=bold Italic:pixelsize=18}Rhythmbox${font}${color4}
${offset 100}${font DejaVu Sans:style=bold:size=10}${color a8d82c}${color da6e14}Titre : ${color a8d82c}${exec rhythmbox-client --no-start --print-playing-format %tt}${color da6e14} par ${color a8d82c}${exec rhythmbox-client --no-start --print-playing-format %aa}
${exec albumart}${image $HOME/conky/scripts/.album -p 10,50 -s 64x64}
${offset 100}${font DejaVu Sans:style=bold:size=9}${color da6e14}Album : ${color a8d82c}${exec rhythmbox-client --no-start --print-playing-format %at} ${color da6e14}
${offset 100}${exec rhythmbox-client --no-start --print-playing-format %te }${offset 10}${execibar 1 $HOME/conky/scripts/conky_rythmbox_bar progress}${offset 10} ${exec rhythmbox-client --no-start --print-playing-format %td}
######## Banshee ########
${else}${if_running banshee-1}${image $HOME/conky/pix/separateurH.png -p -1,0 -s 540x25}$alignc${color black}${voffset 2}${font URW Chancery L:style=Medium Italic:pixelsize=18}Banshee${font}${color4}
${goto 10}${color2}N° Piste : ${goto 100}${color7} ${execpi 1 conkyBanshee -d TN}
${goto 10}${color2}Titre : ${goto 107}${color7}${execpi 1 conkyBanshee -d TI}
${goto 10}${color2}Artiste : ${goto 102}${color7} ${execi 1 conkyBanshee -d AR}
${goto 10}${color2}Album : ${goto 109}${color7}${execi 1 conkyBanshee -d AL}
${exec cp "`conkyBanshee --datatype=CA | sed -e 's/\\\//g'`" $HOME/conky/scripts/.album}${image $HOME/conky/scripts/.album -p 440,40 -s 96x96}
${goto 10}${voffset -10}${execp conkyBanshee --template=$HOME/conkyBanshee.template}
$endif
La il y a un soucis je n'arrive pas à récupérer l'image de la pochette et en plus un petit bug après le titre.
Hors ligne
#773 Le 05/07/2011, à 16:29
- weezixx
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
bonjour ami conky,
voila j'ai trouvé un script conky et j'arrive pas à le mettre dans mon script .conkyrc.
Et une autre question, sur quel site apprendre à faire des conky ? je parle pas des fonctions, mais j'en ai vu certain faire de magnifique oeuvre d'art en script bash (possible ? ), donc voila si vous pourriez m'orienter.
merci
voici mon script trouvé une horloge: (donc comment apprendre à coder comme en bas ?)
#!/bin/bash
# wordclock.sh
# copyright 2010 by Mobilediesel
#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, either version 3 of the License, or
#(at your option) any later version.
#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, see <http://www.gnu.org/licenses/>.
TIME=$(date '+%-I:%-M' --date="${@:-now}")
HOUR=${TIME%:*}
MIN=${TIME#*:}
COLOR="\${color@}"
ON=" white"
OFF=" 606060"
case ${MIN} in
[1-4]|[6-9]|[1-5][1-4]|[1-5][6-9]) ABOUT="${COLOR/@/$ON}" ;;
esac
case ${MIN} in
5[8-9]) OCLOCK=${COLOR/@/$ON}
HOURS[$((${HOUR/#12/0}+1))]=${COLOR/@/$ON}
;;
[0-2]) OCLOCK=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
[3-7]) FIVE=${COLOR/@/$ON}
PAST=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
[8-9]|1[0-2]) TEN=${COLOR/@/$ON}
PAST=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
1[3-7]) QUARTER=${COLOR/@/$ON}
PAST=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
1[8-9]|2[0-2]) TWENTY=${COLOR/@/$ON}
PAST=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
2[3-7]) TWENTY=${COLOR/@/$ON}
FIVE=${COLOR/@/$ON}
PAST=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
2[8-9]|3[0-2]) HALF=${COLOR/@/$ON}
PAST=${COLOR/@/$ON}
HOURS[${HOUR}]=${COLOR/@/$ON}
;;
3[3-7]) TWENTY=${COLOR/@/$ON}
FIVE=${COLOR/@/$ON}
HOURS[$((${HOUR/#12/0}+1))]=${COLOR/@/$ON}
TO=${COLOR/@/$ON}
;;
3[8-9]|4[0-2]) TWENTY=${COLOR/@/$ON}
HOURS[$((${HOUR/#12/0}+1))]=${COLOR/@/$ON}
TO=${COLOR/@/$ON}
;;
4[3-7]) QUARTER=${COLOR/@/$ON}
HOURS[$((${HOUR/#12/0}+1))]=${COLOR/@/$ON}
TO=${COLOR/@/$ON}
;;
4[8-9]|5[0-2]) TEN=${COLOR/@/$ON}
HOURS[$((${HOUR/#12/0}+1))]=${COLOR/@/$ON}
TO=${COLOR/@/$ON}
;;
5[3-7]) FIVE=${COLOR/@/$ON}
HOURS[$((${HOUR/#12/0}+1))]=${COLOR/@/$ON}
TO=${COLOR/@/$ON}
;;
esac
cat<<:EOF
${COLOR/@/$ON}I T ' S${COLOR/@/$OFF} L ${ABOUT}A B O U T${ABOUT/$ON/$OFF} L
D ${QUARTER}A${QUARTER/$ON/$OFF} C ${QUARTER}Q U A R T E R${QUARTER/$ON/$OFF} C
${TWENTY}T W E N T Y${TWENTY/$ON/$OFF} X ${FIVE}F I V E${FIVE/$ON/$OFF}
${HALF}H A L F${HALF/$ON/$OFF} B ${TEN}T E N${TEN/$ON/$OFF} F ${TO}T O${TO/$ON/$OFF}
${PAST}P A S T${PAST/$ON/$OFF} E R ${HOURS[9]}N I N E${HOURS[9]/$ON/$OFF} U
${HOURS[1]}O N E${HOURS[1]/$ON/$OFF} ${HOURS[6]}S I X${HOURS[6]/$ON/$OFF} ${HOURS[3]}T H R E E${HOURS[3]/$ON/$OFF}
${HOURS[4]}F O U R${HOURS[4]/$ON/$OFF} ${HOURS[5]}F I V E${HOURS[5]/$ON/$OFF} ${HOURS[2]}T W O${HOURS[2]/$ON/$OFF}
${HOURS[8]}E I G H T${HOURS[8]/$ON/$OFF} ${HOURS[11]}E L E V E N${HOURS[11]/$ON/$OFF}
${HOURS[7]}S E V E N${HOURS[7]/$ON/$OFF} ${HOURS[12]}T W E L V E${HOURS[12]/$ON/$OFF}
${HOURS[10]}T E N${HOURS[10]/$ON/$OFF} S ${OCLOCK}O ' C L O C K${OCLOCK/$ON/$OFF}
:EOF
Hors ligne
#774 Le 05/07/2011, à 17:12
- usm77
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut l'ami
voila j'ai trouvé un script conky et j'arrive pas à le mettre dans mon script .conkyrc.]
Le code a rentrer dans le conky
${execpi 600 $HOME/conky/scripts/wordclock.sh}
$HOME/conky/scripts/wordclock.sh est le chemin ou se trouve ton script
Et une autre question, sur quel site apprendre à faire des conky ? je parle pas des fonctions, mais j'en ai vu certain faire de magnifique oeuvre d'art en script bash (possible ? ), donc voila si vous pourriez m'orienter.
Le mieux est de chercher sur ce forum et de prendre ce qui t'intéresse en remerciant l'auteur et de tester les lignes de code sur ton propre conky. C'est en forgeant qu'on devient forgeron
Le conkyrc est scinder en 2 parties , la partie configuration, et la partie TEXT (ce qui s'affichera sur l'écran) voir la doc Ubuntu
Le site de siteduzero.com qui explique les fonctions de base.
Il y a aussi Google en recherchant par le mot clé "conky"
Voila @+
Hors ligne
#775 Le 05/07/2011, à 17:47
- weezixx
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
merci de ta réponse mais ça ne marche pas super, mon conky:
own_window yes
update_interval 1
double_buffer yes
TEXT
${execpi 600 $HOME/kevin/wordclock.sh}
et il me dit que mon conky n'est pas trouvé :s
Hors ligne