site
header
Rendez-vous sur Arrakis
Le site perso d'un hacker libriste curieux crêpophile et étourdi

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