dotfiles

configuration files for shell, text editor, graphical environment, etc.
git clone git://src.adamsgaard.dk/dotfiles
Log | Files | Refs | README | LICENSE Back to index

commit 80db5488018df736b5d0a69fda18dfa2282d9b04
parent b3c6b0bbf38c305701c9f1e3c27667eb169ccf71
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Wed,  2 Jan 2019 15:13:23 +0100

Add script to show notifications for calcurse appointments

Diffstat:
Mlinks/.config/i3/config | 1+
Alinks/bin/calcurse_reminders.py | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 70 insertions(+), 0 deletions(-)

diff --git a/links/.config/i3/config b/links/.config/i3/config @@ -249,4 +249,5 @@ exec --no-startup-id unclutter exec --no-startup-id dunst exec --no-startup-id compton exec --no-startup-id calcurse --daemon +exec --no-startup-id ~/bin/calcurse_reminders.py 15 #exec --no-startup-id xcompmgr diff --git a/links/bin/calcurse_reminders.py b/links/bin/calcurse_reminders.py @@ -0,0 +1,68 @@ +#!/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)+ \ No newline at end of file