« On se tient au courant ! »

| Aucun Commentaire | Aucun Trackback

Récemment, au détour de GitHub, j'ai vu un projet intéressant : growlme. Pour ceux qui ne connaissent pas Growl, il s'agit d'un système de notification non intrusif. Imaginez que vous lancez la gravure d'un DVD, et pendant ce temps-là vous en profitez pour travailler sur un article ou un billet de blog. Traditionnellement, les logiciels de gravure vous afficheront une petite fenêtre à la fin de la grave, interrompant ainsi ce que vous étiez en train de faire. Avec les systèmes de notification comme Growl, une fenêtre volante apparaîtra en haut à droite de l'écran signalant la fin de la gravure. Growl est uniquement disponible sur Mac1, mais il existe des systèmes équivalent sur Linux (libnotify entre autres).

growlme permet de lancer un programme en ligne de commande et d'être tenu au courant du résultat de son exécution via Growl. Comme il m'arrive souvent de lancer un processus assez long via la ligne de commande, et de m'atteler à d'autres tâches entre-temps, j'aimerais bien avoir l'équivalent sur mon Linux.

Le résultat n'est pas bien long et exploite Desktop::Notify, c'est-à-dire l'interface Perl à libnotify, IPC::Run pour lancer la commande, Getopt::Long pour traiter les paramètres en ligne de commande (notez l'usage de Getopt::Long::Configure('pass_through') pour conserver un @ARGV, ainsi que Sys::Hostname pour avoir le titre de la notification. Pour le reste, j'ai singé le programme originel.

#!/usr/bin/env perl

use strict;
use warnings;

use Desktop::Notify;
use IPC::Run qw( run );
use Getopt::Long;
use Sys::Hostname;

my $config = {
    message => 'Succeed!',
    fail    => 'FAILED',
    title   => hostname(),
};

Getopt::Long::Configure('pass_through');
GetOptions( $config, 'message=s', 'fail=s', 'title=s' );

if ( scalar(@ARGV) == 0 ) {
    die "$0: must provide a command to execute\n";
}
else {
    my $notify = Desktop::Notify->new();
    my $notification;

    eval { run \@ARGV };
    my $exitcode = $? >> 8;
    if ( $exitcode == 0 ) {
        $notification = $notify->create(
            summary => $config->{title},
            body    => $config->{message},
            timeout => 5000,
        );
    }
    else {
        $notification = $notify->create(
            summary => $config->{title},
            body    => $config->{fail},
            timeout => 5000,
        );
    }

    $notification->show();
    $notification->close();
}

J'ai créé un gist sur GitHub de cet outil.

Aucun Trackback

URL de Trackback : http://blog.bjornoya.be/mt-tb.cgi/21

Laisser un commentaire

À propos de cette note

Cette page contient une unique note de manu publiée le 26 février 2010 23h16.

Pearltrees est la note précédente de ce blog.

Pearltrees, RDF & Perl est la note suivante de ce blog.

Retrouvez le contenu récent sur l'index principal ou allez dans les archives pour retrouver tout le contenu.

Pages

Powered by Movable Type 4.261