Nouvelle version de mon conky calendrier lunaire.
Je l'ai refait car avec la transparence du nouveau conky 1.8.0 et own_window_argb_visual yes, l'image de la lune était transparente et pas très jolie.
D'abord j'ai tout regroupé dans un dossier dans mon ~/.conkyrc, que j'ai nommé conky 14.
J'ai fait, avec l'aide de wlourf, un script lua:
square_to_round.lua
--[[ SQUARE_TO_ROUND WIDGET by Wlourf (07 April 2010, version 1.0.1)
http://u-scripts.blogspot.com/
This widget display a rounded image on your conky from a square image only.
Parameters are
filename --nom de l'image carrée en entrée
xc,yc --coordonnées du centre de l'image ronde par rapport au coin en haut à gauche de la fenêtre conky
radius --rayon du cercle final
angle --angle de rotation de l'image
radius_crop --dans l'image carrée, pourcentage du cercle à extraire par rapport au côté du carré(1-100)
period --converti l'image de carré à rond toutes les 'period' secondes
]]
require 'cairo'
require 'imlib2'
function convert_square(fileIn,fileOut,radius,angle,radius_crop)
--convert Input file from jpg to png, scale it and rotate it
local imageInput = imlib_load_image(fileIn)
local out_size = radius*2/(radius_crop/100)
imlib_context_set_image(imageInput)
w = imlib_image_get_width();
h = imlib_image_get_height();
imlib_image_set_format("png")
buffer = imlib_create_image(out_size,out_size);
imlib_context_set_image(buffer);
imlib_blend_image_onto_image(imageInput, 0,
0, 0, w, h,
0,0, out_size,out_size)
rot_img=imlib_create_rotated_image(angle*math.pi/180)
imlib_context_set_image(rot_img)
imlib_save_image(fileOut)
imlib_free_image()
imlib_context_set_image(buffer)
imlib_free_image()
imlib_context_set_image(imageInput)
imlib_free_image()
end
function crop_square_to_round(filename,xc,yc,radius)
local surface = cairo_image_surface_create_from_png(filename)
local img_w = cairo_image_surface_get_width (surface);
local cw,ch = conky_window.width, conky_window.height
local cs=cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, cw,ch)
local cr=cairo_create(cs)
cairo_translate(cr,xc-img_w/2,yc-img_w/2)
cairo_arc (cr, img_w/2,img_w/2, radius, 0, 2*math.pi)
cairo_clip (cr)
cairo_new_path (cr)
cairo_set_source_surface (cr, surface, 0, 0)
cairo_paint (cr)
cairo_destroy(cr)
cairo_surface_destroy (cs)
cairo_surface_destroy (surface)
end
function display_round(filename,xc,yc,radius,angle,radius_crop,period)
if conky_window == nil then return end
if tonumber(conky_parse('${updates}')) <2 then return end
local filepng = filename .. ".png"
local actual_time = os.time()
if last_time == nil then last_time=0 end
local actual_img = io.open(filepng,"r")
if last_time+period < actual_time or last_time == 0 or actual_img == nil then
print ('convert image ' .. filename)
convert_square(filename,filepng,radius,angle,radius_crop)
last_time=actual_time
end
crop_square_to_round(filepng,xc,yc,radius)
io.close()
end
--[[END OF SQUARE TO ROUND WIDGET]]
function conky_main(filename)
if conky_window == nil then return end
display_round(filename,
58,90,55, --xc,yc,radius
5, --angle
98, --radius_crop (1-100)
3600 --period
)
end
J'ai ensuite fait un script qui va télécharger l'image de la lune:
get_image.sh
#!/bin/sh
dir="/home/dominique/.conkyrc/conky14/moon-phase"
mkdir -p $dir
cd $dir
wget http://static.die.net/moon/576.jpg -O "$dir/moon.jpg"
Ensuite je voulais afficher les quatre principales phase de la lune, j'ai donc créé un fichier texte:
calendar.txt
0406;Dernier quartier
0414;Nouvelle lune
0421;Premier quartier
0428;Pleine lune
0505;Dernier quartier
0513;Nouvelle lune
0520;Premier quartier
0527;Pleine lune
0604;Dernier quartier
0612;Nouvelle lune
0618;Premier quartier
0626;Pleine lune
0704;Dernier quartier
0711;Nouvelle lune
0718;Premier quartier
0725;Pleine lune
0802;Dernier quartier
0809;Nouvelle lune
0816;Premier quartier
0824;Pleine lune
0901;Dernier quartier
0908;Nouvelle lune
0915;Premier quartier
0923;Pleine lune
0930;Dernier quartier
1007;Nouvelle lune
1014;Premier quartier
1022;Pleine lune
1030;Dernier quartier
1105;Nouvelle lune
1113;Premier quartier
1121;Pleine lune
1128;Dernier quartier
1205;Nouvelle lune
1213;Premier quartier
1221;Pleine lune
1227;Dernier quartier
Et avec l'aide de proxy (encore merci) qui m'a fait un script pour l'afficher:
#!/bin/bash
DATE=$(date +"%m%d")
LINE=$(grep ${DATE} /home/dominique/.conkyrc/conky14/calendar.txt)
if [ -z "${LINE}" ] ; then
MOON=""
else
MOON=$(echo ${LINE} | cut -d ';' -f2)
fi
echo ${MOON}
Et pour finir le conkyrc qui va avec (nommé chez moi conkyrc14:
# -- Conky settings -- #
background no
update_interval 10
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 normal
own_window_transparent yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
own_window_argb_visual yes
own_window_colour FFFFFF
own_window_title square to round
border_inner_margin 0
border_outer_margin 0
minimum_size 300 150
alignment tr
gap_y 30
gap_x 50
# -- Graphics settings -- #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
# -- Text settings -- #
use_xft yes
xftfont Santana:size=12
xftalpha 0
uppercase no
default_color 000000
text_buffer_size 2048
imlib_cache_size 0
#--- LUA ---
lua_load ~/.conkyrc/conky14/square_to_round.lua
lua_draw_hook_pre main /home/dominique/.conkyrc/conky14/moon-phase/moon.jpg
TEXT
${execpi 3600 ~/.conkyrc/conky14/get_image.sh}
${goto 155}${font Monaco:size=18}${color #0000ff}${execi 1800 date +%^B | cut -c1}${font Monaco:size=10}${color #0F4C5D}${execi 1800 date +%B | cut -c2-}
${goto 105}${color #0F4C5D}${font Monaco:size=9}${execpi 60 DJS=`date +%_d`; cal | sed '/./!d' | sed '1d' | sed 's/$/ /' | fold -w 21 | sed -n '/^.\{21\}/p' | sed 's/^/${goto 105} /' | sed /" $DJS "/s/" $DJS "/" "'${color #FF000C}'"$DJS"'${color #0000ff}'" "/}
${font newpushkin:size=14}${execpi 3600 ~/.conkyrc/conky14/name-phase.sh}
Ouffff.... c'était un peu long mais je suis assez satisfait du résultat.