J'utilise le calendrier et l'application de planification calcurse. C'est un bon programme en ligne de commande.
Par exemple, avec calcurse -a
, vous pouvez afficher les événements de la journée.
Comment je peux envoyer cette information à notify-send
, pour afficher une notification sur le bureau?
$ calcurse -a | notify-send
ne fonctionnera pas ...
Comme souvent, le retour à une fonctionnalité (très) basique, mais néanmoins complète, semble bizarre, mais rafraîchissant. Je ne sais pas si je l'utiliserais bien.
Bien que le bas de la fenêtre de Calcurse suggère une option pour pipe , et site Web de Calcurse mentionne " système de notification configurable par l’utilisateur "Je n’ai pas trouvé le moyen de l’utiliser pour les notifications automatiques planifiées de all événements.
Dans le même temps: une telle fonctionnalité de rappel serait un ajout utile. Le script ci-dessous peut être utilisé comme plug-in pour calcurse
afin d'afficher des rappels. J'espère que tu trouves cela utile.
Il est extrêmement facile à utiliser; exécutez simplement le script en arrière-plan. Tout ce qu'il fait est de vérifier les événements d'aujourd'hui (mis à jour deux fois par minute) et d'exécuter les notifications à un moment quelconque avant l'expiration.
Le résultat de la commande:
calcurse -a
ressemble à:
12/29/15:
* Free today!
- 12:00 -> ..:..
See if this script does its job :)
Il apparaît immédiatement que les éléments planifiés commencent par un "-", tandis que les éléments pour toute la journée commence par "*". Ce que nous devons faire, c'est créer deux groupes (listes) d'éléments:
Dans la première catégorie, nous devons analyser le temps, le convertir en un format avec lequel nous pouvons calculer, afin que nous puissions afficher un rappel à n
- minutes avant l'expiration.
Par la suite, nous devons "garder un œil sur l'horloge" pour comparer l'heure réglée (de l'événement) à l'heure actuelle. Si l'intervalle de temps entre les deux entre l'heure d'avertissement définie, affichez simplement la notification.
Enfin, pour éviter les notifications répétées, nous devons ajouter l’élément à une liste "terminé".
En outre, le script nettoie la liste "terminé"; si un élément ne figure plus dans les éléments du jour (que vous l'ayez supprimé ou le jour changé au cours de votre session), les éléments sont automatiquement supprimés.
Au démarrage (se connecter)
À un moment quelconque avant l'expiration (dans ce cas, 15 minutes)
#!/usr/bin/env python3
import subprocess
import time
import sys
warn = int(sys.argv[1])
def get(command):
return subprocess.check_output(command).decode("utf-8")
def convert(t):
# convert set time into a calculate- able time
return [int(n) for n in t.split(":")]
def calc_diff(t_curr, t_event):
# calculate time span
diff_hr = (t_event[0] - t_curr[0])*60
diff_m = t_event[1] - t_curr[1]
return diff_hr + diff_m
def cleanup(done, newlist):
# clean up "done" -lists
for item in done:
if not item in newlist:
done.remove(item)
return done
def show_time(event, s = ""):
# show scheduled event
hrs = str(event[0][0]); mnts = str(event[0][1])
mnts = "0"+mnts if len(mnts) != 2 else mnts
subprocess.call(["notify-send", s, "At "+hrs+":"+mnts+" - "+event[1]])
startups = []; times = []
while True:
currtime = convert(time.strftime("%H:%M"))
events = [l.strip() for l in get(["calcurse", "-a"]).splitlines()][1:]
# arrange event data:
groups = []; sub = []
for l in events:
if l.startswith("* "):
groups.append([l.replace("* ", "")])
Elif l.startswith("- "):
sub.append(convert(l.split("->")[0].replace("-", "").strip()))
else:
groups.append(sub+[l])
sub = []
# run notifications
for item in groups:
# on startup:
if not item in startups:
# all- day events
if len(item) == 1:
subprocess.call(["notify-send", "Today - "+item[0]])
# time- specific events
Elif len(item) == 2:
show_time(item, "Appointment")
startups.append(item)
# as a reminder:
if all([len(item) == 2, not item in times]):
span = calc_diff(currtime, item[0])
if span <= warn:
show_time(item, "[Reminder]")
times.append(item)
# clean up events
startups = cleanup(startups, groups); times = cleanup(times, groups)
time.sleep(30)
run_ccursereminders.py
Testez-le avec le temps que vous souhaitez être averti (avant l'heure d'expiration, en minutes) comme argument. Un exemple, pour exécuter des rappels 30 minutes avant votre rendez-vous:
python3 /path/to/run_ccursereminders.py 30
Si cela fonctionne comme vous le souhaitez, ajoutez-le aux applications de démarrage: choisissez Tableau de bord> Applications de démarrage> Ajouter. Ajouter la commande
/bin/bash -c "sleep 30 && python3 /path/to/run_ccursereminders.py 30"
où le dernier 30
est le nombre de minutes pour vous avertir avant l'expiration d'un rendez-vous
J'ai pu le faire fonctionner avec la substitution de commande:
notify-send "calcurse notification header" "$(calcurse -n)"
Je non, c'est vieux, mais si quelqu'un est toujours intéressé, les paramètres suivants fonctionnent pour moi dans mon fichier ~/.calcurse/conf
:
notification.command=calcurse --next | xargs -0 notify-send "Appointment"
daemon.enable=yes
notification.warning=300