J'avais trouvé un script python qui faisait déjà la chose mais en anglais
Comme je suis un gros chauvin, j'ai donc refait ce script pour nous, utilisateurs de la langue de molière
Voici un donc script perl. Il génère un calendrier qui s'affiche à l'écran. Dans votre fichier
.conkyrc, il faudra que vous ayez défini les couleurs suivantes :
Code : Tout sélectionner
color0=xxxxx # Couleur de la date
color1=xxxxx # Couleur initiale du calendrier
color2=xxxxx # Couleur des dates week end
Je ferai évoluer ce post en fonction des améliorations. Si vous cherchez comment utiliser ce script,
vous donnera toute l'aide possible. Info importante (même si c'est déjà mis dans la doc pod) ce script s'utilise dans .conkyrc comme ceci :
N'oubliez pas le p de "execp"
Si vous avez d'autres idées d'améliorations autres que celles citées dans la doc, n'hésitez pas
/!\ Attention, dans les dernières versions
- Le texte renvoyé à conky est supérieur à 256 bytes. Il faudra rajouter cette ligne dans votre conky :
- Pour palier un problème de passage de paramètres de conky vers un script , vous devez passer un argument au script (
si vous trouvez une solution pour connaître l'alignement sans utiliser cette méthode, je suis preneur) :
Voici le code :
Version 0.10 du
05/09/2009
Code : Tout sélectionner
#!/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
Version 0.09 du
01/09/2009
Code : Tout sélectionner
#!/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";
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.09;
# 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]);
$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]);
$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 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
Version 0.08 du
23/08/2009
Code : Tout sélectionner
#!/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";
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.08;
# 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) {
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]);
$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]);
$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) {
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 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
Version 0.07 du
23/08/2009
Code : Tout sélectionner
#!/usr/bin/perl -w
##################
# Nom du programme : Calendrier
#####################################
use strict;
use integer;
use constant VERSION => 0.07;
# 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) {
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 applique la couleur sur le samedi
for(my $i = 5; $i < scalar @calendrier; $i += 7) {
next if($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]);
$calendrier[$i] = COULEUR_WEEKEND . $calendrier[$i] . COULEUR_INITIALE;
}
print $entete;
my $j = 0;
foreach my $date (@calendrier) {
$j++;
if($date eq $sav_jour) {
print COULEUR_DATE . $date . COULEUR_INITIALE;
}
else {
print $date;
}
if(($j%7) == 0) {
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}>
Si vous avez fait un chmod +x Calendrier :
C<${execp ./Calendrier}>
=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 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.
=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
Version 0.06 du
22/08/2009
Code : Tout sélectionner
#!/usr/bin/perl -w
##################
# Nom du programme : Calendrier
#####################################
use strict;
use integer;
use constant VERSION => 0.06;
# 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_entete = length("$mois $annee");
$taille_entete = (LARGEUR - $taille_entete) / 2;
# Mise en forme pour l'affichage
my $entete = " " x $taille_entete . "$mois $annee\n";
my @calendrier = qw(Lu Ma Me Je Ve Sa Di);
foreach my $element (1..$emplacement_premier_jour_mois) {
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 applique la couleur sur le samedi
for(my $i = 5; $i < scalar @calendrier; $i += 7) {
next if($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]);
$calendrier[$i] = COULEUR_WEEKEND . $calendrier[$i] . COULEUR_INITIALE;
}
print $entete;
my $j = 0;
foreach my $date (@calendrier) {
$j++;
if($date eq $sav_jour) {
print COULEUR_DATE . $date . COULEUR_INITIALE;
}
else {
print $date;
}
if(($j%7) == 0) {
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}>
Si vous avez fait un chmod +x Calendrier :
C<${execp ./Calendrier}>
=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 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
Version 0.05 du
20/08/2009
Code : Tout sélectionner
#!/usr/bin/perl -w
##################
# Nom du programme : Calendrier
#####################################
use strict;
use integer;
use constant VERSION => 0.05;
# Définition des couleurs venant de conky
use constant COULEUR_DATE => '${color0}'; # Couleur de la date
use constant COULEUR_INITIALE => '${color}'; # Couleur initiale
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_entete = length("$mois $annee");
$taille_entete = (LARGEUR - $taille_entete) / 2;
# Mise en forme pour l'affichage
my $calendrier = " " x $taille_entete . "$mois $annee\n" . "Lu Ma Me Je Ve Sa Di\n";
foreach my $element (1..$nb_jours_par_mois{$mois}) {
if($element == 1) {
$calendrier .= " " x $emplacement_premier_jour_mois;
$emplacement_premier_jour_mois++;
}
$calendrier .= ($element < 10) ? " " . $element : $element;
if(($emplacement_premier_jour_mois % 7) == 0) {
$calendrier .= "\n";
}
else {
$calendrier .= " ";
}
$emplacement_premier_jour_mois++;
}
$calendrier .= "\n";
my($debut, $fin) = split " $sav_jour ", $calendrier;
# Affichage final
print $debut . " " . COULEUR_DATE . $sav_jour . COULEUR_INITIALE . " " . $fin;
__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<color0> dans conky sera la couleur de la date courante et C<color> permettra de revenir à la
couleur originale.
=head1 AUTEUR
Chipster Julien
=head1 UTILISATION
Dans conky, il faut l'utiliser comme ceci :
C<${execp perl Calendrier}>
Si vous avez fait un chmod +x Calendrier :
C<${execp ./Calendrier}>
=head1 BOGUES
Pas de bogue connu actuellement
=head1 Évolutions
=head2 Futures
=over 4
=item
Mettre les autres jours n'appartenant pas au mois avec une couleur différente
=back
=head2 Passées
=over 4
=item
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
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
Remplacement de C<my $date = 'date'> par localtime
=item
Création du script
=back
Version 0.04 du
19/08/2009
Code : Tout sélectionner
#!/usr/bin/perl -w
##################
# Nom du programme : Calendrier
#####################################
use strict;
use integer;
use constant VERSION => 0.04;
# Définition des couleurs venant de conky
use constant COULEUR_DATE => '${color0}'; # Couleur de la date
use constant COULEUR_INITIALE => '${color}'; # Couleur initiale
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_entete = length("$mois $annee");
$taille_entete = (LARGEUR - $taille_entete) / 2;
# Mise en forme pour l'affichage
my $calendrier = " " x $taille_entete . "$mois $annee\n" . "Lu Ma Me Je Ve Sa Di\n";
foreach my $element (1..$nb_jours_par_mois{$mois}) {
if($element == 1) {
$calendrier .= " " x $emplacement_premier_jour_mois;
$emplacement_premier_jour_mois++;
}
$calendrier .= ($element < 10) ? " " . $element : $element;
if(($emplacement_premier_jour_mois % 7) == 0) {
$calendrier .= "\n";
}
else {
$calendrier .= " ";
}
$emplacement_premier_jour_mois++;
}
$calendrier .= "\n";
my($debut, $fin) = split $sav_jour, $calendrier;
# Affichage final
print $debut . COULEUR_DATE . $sav_jour . COULEUR_INITIALE . $fin;
__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<color0> dans conky sera la couleur de la date courante et C<color> permettra de revenir à la
couleur originale.
=head1 AUTEUR
Chipster Julien
=head1 UTILISATION
Dans conky, il faut l'utiliser comme ceci :
C<${execp perl Calendrier}>
Si vous avez fait un chmod +x Calendrier :
C<${execp ./Calendrier}>
=head1 BOGUES
Pas de bogue connu actuellement
=head1 Évolutions
=head2 Futures
=over 4
=item
Mettre les autres jours n'appartenant pas au mois avec une couleur différente
=back
=head2 Passées
=over 4
=item
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
Remplacement de C<my $date = 'date'> par localtime
=item
Création du script
=back
Version 0.03 du
18/08/2009
Code : Tout sélectionner
#!/usr/bin/perl -w
##################
# Nom du programme : Calendrier
#####################################
use strict;
use warnings;
use constant VERSION => 0.03;
# Définition des couleurs venant de conky
use constant COULEUR_DATE => '${color0}'; # Couleur de la date
use constant COULEUR_INITIALE => '${color}'; # Couleur initiale
# Récupération d'informations
my $calendrier = `cal`; # Récupération du calendrier
my $date = (localtime)[3]; # Récupération de la date courante
# Traitement des informations
my @calendrier = split "\n", $calendrier; # On découpe le calendrier
$calendrier[0] =~ /^(\s+)(\S+)(\s\d{4}.+)$/; # Recherche du mois
$calendrier[0] = $1 . ucfirst($2) . $3; # Mise en maj du 1 ier caractère du mois
$calendrier[1] = "Di Lu Ma Me Je Ve Sa"; # On remplace la 2 ième ligne
$calendrier = join "\n", @calendrier; # On recole tous les morceaux
my ($debut, $fin) = split $date, $calendrier; # Découpe du calendrier
# Affichage final
print $debut . COULEUR_DATE . $date . COULEUR_INITIALE . $fin;
__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<color0> dans conky sera la couleur de la date courante et C<color> permettra de revenir à la
couleur originale.
=head1 AUTEUR
Chipster Julien
=head1 UTILISATION
Dans conky, il faut l'utiliser comme ceci :
C<${execp perl Calendrier}>
Si vous avez fait un chmod +x Calendrier :
C<${execp ./Calendrier}>
=head1 BOGUES
Le programme devrait être refait en utilisant B<uniquement> localtime en lieu et place de :
C<my $calendrier = `cal`;>
Ceci permettra d'éviter des failles de sécurité
=head1 Évolutions
=head2 Futures
=over 4
=item
Changer le code C<$my calendrier = `cal`>
=item
Mettre les autres jours n'appartenant pas au mois avec une couleur différente
=back
=head2 Passées
=over 4
=item
Remplacement de C<my $date = 'date'> par localtime
=item
Création du script
=back