Il y a environ 3 ans, j'ai fait un "petit" programme nommé battground. Au début, c'était un petit script shell qui changeait la couleur du fond d'écran suivant l'état de charge de la batterie de mon laptop, le genre de petit script à la con bricolé en 1h dans un moment d'ennui.

Petit à petit j'ai commencé à lui rajouter des petites fonctionnalités, comme par exemple pouvoir configurer la variation des couleurs au fil de la charge, décharge, etc.. J'ai fini par me prendre complètement au jeu et à passer des journées entières dessus, d'ailleurs Marie s'en souvient sûrement encore très bien :) Au final, ce petit script est devenu un truc assez complet, complexe, et compliqué :

  • Chaque état de charge a une couleur de base, comme ça on peut savoir d'après la couleur si la batterie est en train de se vider, remplir, si elle a fini de se charger, etc..
  • Le pourcentage de batterie (donc entre 0 et 100) est transformé en un autre nombre, comme on veut, par des petites fonctions mathématiques simples, appelées filtres. Par exemple, "reverse" transforme 0 en 100, 100 en 0, 60 en 40, etc.. Autre exemple, "step" arrondit à la dizaine (ou à ce qu'on veut) et produit donc un effet d'échelon. Encore autre exemple, "threshold" transforme tout ce qui passe en-dessous (ou au-dessus) d'une certaine seuil en une valeur fixe, par exemple 0. Il est possible de combiner (composer, pour les matheuses/matheux) plusieurs fonctions ensemble, les unes à la suite des autres. Le nombre final sert à faire varier la teinte de la couleur de base, et idem pour la saturation. Comme chaque filtre est un fichier indépendant très simple, on peut aussi créer soi-même ses propres filtres si on se sent d'humeur matheuse.
  • On peut faire des thèmes, qui sont donc la combinaison de couleurs de base et d'une série de filtres. Il y a des thèmes basiques prédéfinis, par exemple un qui met du vert pour la charge, rouge pour la décharge, bleu pour "chargé", et qui se fout du pourcentage de batterie. Un autre thème prêt à l'emploi passe progressivement de noir à blanc en passant par les verts pour la charge, et retourne de blanc à noir mais cette fois en passant par les rouges pour la décharge. C'est très facile de faire ses propres thèmes, du coup c'est un peu comme choisir des assortiments de couleurs de fond d'écran, sauf que ça "bouge".
  • Autre détail, on peut choisir le critère de mise à jour de l'information: une seule fois au lancement du programme, à chaque événement ACPI, toutes les 5 minutes, etc.. Les critères disponibles devraient suffire, mais on peut écrire ses propres critères de mise à jour. Je sais pas moi, à chaque réception de mail par exemple :)
  • On peut télécommander le programme en le forçant à mettre à jour les couleurs manuellement, en lui faisant relire ses fichiers de configuration, etc..
  • À la demande de Lunar qui avait à l'époque un Mac, ça marche aussi sur les Macs, qui n'utilisent pas ACPI pour la gestion de la batterie mais PMU.

Bref, en quelques semaines, le petit script était devenu un machin assez gros. Le seul truc qui n'a jamais changé, c'est que... c'est resté écrit en shell ! C'est bien séparé en plusieurs fichiers et tout, mais le tout combiné, c'est environ 1000 lignes de code.

Aujourd'hui, dans l'idée de faire un paquet Debian, j'ai remis le nez dedans, corrigé quelques trucs, ajouté une gestion du cas "batterie absente", etc.. Mais quand même... il faudrait vraiment refaire ce programme dans un autre langage, par exemple en C, en haskell, en python, ou n'importe quoi mais pas en shell par pitié, parce que là c'est vraiment devenu trop gros. N'empêche, c'était marrant à faire... Je vais peut-être me remettre à l'utiliser, tiens.