Présentation de la version 1

2011-11-02 Un calendrier avec Conky

C'est en voyant sur cette page du blog de Nicolargo un joli fond d'écran avec un calendrier incorporé que je me suis demandé s'il n'était pas possible d'afficher un tel calendrier avec Conky, indépendamment du fond d'écran.

Après une bonne grosse heure à fouiller la PerlFaq 4 et le Perl Cookbook, j'en suis arrivé à ce qui suit:

  #!/usr/bin/perl -w
  use strict;
  use Time::Local;
  use POSIX qw(strftime);
  
  my $color   = "#909890";
  my $s_color = "#e0e0e0"; # couleur pour le dimanche
  my $d_color = "#ff0000"; # couleur pour le jour courant
  
  my $this_month = (localtime)[4];
  my $this_day   = (localtime)[3];
  
  my $time = timelocal(0,0,0,1,(localtime)[4,5]); # le temps exprimé en secondes,
                                                  # au début du mois
  
  my $month = $this_month;
  
  print<<EoT;
  use_xft yes
  gap_x 20
  alignment top_left
  TEXT
  \${font Impact:pixelsize=27}
  \${voffset 485}
  \${color $color}
  EoT
  
  while ($month == $this_month) {
    my $prefix  = '';
    my $postfix = '';
    my $day_of_month = (localtime($time))[3];
    my $day_of_week  = strftime("%u", localtime($time));
    if ($day_of_week == 7) {                # si on est dimanche
      $prefix  = "\${color $s_color}";
      $postfix = "\${color $color}";
    }
    if ($day_of_month == $this_day) {       # si on est le jour courant
      $prefix  = "\${color $d_color}";
      $postfix = "\${color $color}";
    }
    print "$prefix$day_of_month$postfix  ";
    $time  = $time + 24 * 60 * 60;          # ajout de 24h
    $month = (localtime($time))[4];
  }
  print "\n"

Ce qui produit un fichier `conkyrc` de ce type, les dimanches se détachant en couleur plus lumineuse, le jour courant en rouge:

  use_xft yes
  gap_x 20
  alignment top_left
  TEXT
  ${font Impact:pixelsize=27}
  ${voffset 485}
  ${color #909890}
  1  ${color #ff0000}2${color #909890}  3  4  5  ${color #e0e0e0}6${color #909890}  7  8  9  10  11  12  (etc.)

http://www.k1ka.be/pics/arbre_calendrier.png

Si certains aiment l'image sans le calendrier, elle est disponible ici.

Il est possible de lancer plusieurs instances de conky simultanément avec des fichiers de configuration différents:

  $ conky -c .conky_calendar

Il ne reste plus qu'à ficeler le tout, soit en lançant à la suite, dans un .xinitrc

soit en lançant la génération du fichier conkyrc via crontab. En lisant la page de man de crontab, on découvre en effet qu'il est possible de lancer une commande au démarrage du système via l'instruction @reboot. Comme le calendrier ne doit être mis à jour que le premier du mois, on peut imaginer un test en ce sens.

Mais à ce stade, j'ai eu la flemme.