Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Notifications dans la barre de dwm

Version en C

J'ai réussi à mettre en place un système de fifo basique dans dwmstatus. Il suffit de lancer, pour afficher n'importe quelle information :

echo "information" >> /tmp/dwmbuf

Version python

Voici un script permettant d'afficher n'importe quelle information dans la barre de dwm. Il se contente de lire ligne par ligne un fichier contenant les infos à afficher.

Typiquement, vous remplissez ce fichier via d'autres programmes, un peu de cette façon :

echo "Nouvelle notification" > buffile

où buffile est le fichier contenant les notifications.

Pensez à modifier le chemin vers ce fichier, ainsi qu'à indiquer le temps pendant lequel la notification doit être affichée.

Le script:

#!/usr/bin/env python
# -*- coding:Utf-8 -*-
# Fichier: dwm_notif.py
# Cree le 14 sept. 2012 17:26:40

"""

Auteur :      thuban (thuban@singularity.fr)
licence :     GNU General Public Licence

Description :
    notifications dans dwm.
    Le script affiche unes par unes les lignes contenues dans un fichier buffile.
    Ainsi, il est ficile d'afficher dans la barre de dwm n'importe quelle
    information, sur le principe des notifications.

    Pour afficher une nouvelle info, il suffira de lancer (via un programme externe)
        echo "Nouvelle information" >> buffile

    Où buffile est le fichier que vous avez choisi pour contenir les notifications.

"""

notiftime = 10   # Temps d'affichage d'une notification
buffile = '/tmp/dwmbuf'   # fichier contenant les notifications

import time
import os
import sys

def bufnotif(buffile):
    log = ''
    if os.path.isfile(buffile):
        with open(buffile, 'r') as blog:
            log =blog.readlines()
    if len(log) != 0:
        with open(buffile, 'w') as m:
            for item in log[1:] :
                m.write(item)
        return(log[0].strip('\n'))
    else:
        return("")

def main():

    curTime = time.time()
    notif = bufnotif(buffile)
    nextNotif = curTime + notiftime

    while True :
        curTime = time.time()
        if curTime > nextNotif:
            notif = bufnotif(buffile)
            nextNotif = curTime + notiftime

        try :
            os.system('xsetroot -name "{0}"'.format(notif))       # pour dwm
        except :
            print('erreur inattendue: ', sys.exc_info()[0])
            raise
        time.sleep(1)

    return 0

if __name__ == '__main__':
    main()

# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4