Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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
mesecrans.jpg

Celui de droite qui contient les conky
ecrandroite.jpg 

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

shamen456 a écrit :

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...

http://fc03.deviantart.net/fs70/i/2011/ … 3jfkkn.png


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.

epc2203 face avant
epc2203 face arrière

epc2203 configuration page


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

shamen456 a écrit :

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...

http://fc03.deviantart.net/fs70/i/2011/ … 3jfkkn.png

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 smile


"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 smile

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 :

mini_134085Capture2.png

big_smile

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.
captureep.th.png
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

Frrout a écrit :

Ç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 !

Screen
cbsunset.png

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 wink


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

conky meteo
C'est super il fait beau les prochains jours

L'autre modification est d'avoir rajouter les icones dans la partie système
conky systeme

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

amarok

rhythmbox.png

branshee.png
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

weezixx a écrit :

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