sdep

A simple "date+event" line parser
git clone https://git.tronto.net/sdep
Download | Log | Files | Refs | README | LICENSE

commit d506146c55ffa28ed8f5ba2d7ebd496e60e6a8d4
parent 9902b66c098b51ac91785eb5d929a73b981ce08c
Author: Sebastiano Tronto <sebastiano.tronto@gmail.com>
Date:   Wed, 22 Dec 2021 09:10:09 +0100

added a script to check past events and notify

Diffstat:
Ascripts-build/sdep-add | 24++++++++++++++++++++++++
Ascripts-build/sdep-checknow | 37+++++++++++++++++++++++++++++++++++++
Ascripts-build/sdep-clear | 11+++++++++++
Ascripts-build/sdep-edit | 11+++++++++++
Ascripts-build/sdep-list | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ascripts/sdep-checkpast | 21+++++++++++++++++++++
Asdep.o | 0
7 files changed, 169 insertions(+), 0 deletions(-)

diff --git a/scripts-build/sdep-add b/scripts-build/sdep-add @@ -0,0 +1,24 @@ +#!/bin/sh + +# Adds a line to /home/sebastiano/.local/share/sdep/once. It is possible to specify a date, which will be +# read by date -d and prepended to the input text. +# -d is a non-portable option of GNU date. On some other systems one can +# accomplish the same with the -j option. + +# Usage: sdep-add [date] +# Example: sdep-add "next monday" + +file="/home/sebastiano/.local/share/sdep/once" +date="" + +[ -n "$1" ] && date=$(date -d "$1" +%Y-%m-%d) + +[ -n "$date" ] && printf "$date " + +read text + +if [ -n "$text" ]; then + printf "${date}\t${text}\n" >> "$file" +else + echo "Event not saved" +fi diff --git a/scripts-build/sdep-checknow b/scripts-build/sdep-checknow @@ -0,0 +1,37 @@ +#!/bin/sh + +# Run this every minute (for example using cron) to receive a notification +# when an event happens. +# +# The events are read from the following files in /home/sebastiano/.local/share/sdep folder: +# once: events that only happen once; full date needs to be specified +# daily: events that happen every day; only specify the time in HH:MM format +# weekly: only specify Weekday + time +# monthly: only specify day of the month + time + +# Requires: notify-send; the weekly part uses the non-portable -d option of +# GNU date, which you might have to change if you are not on Linux (on some +# systems you can accomplish the same with -j). + +notify="notify-send -t 3600000" +title="$(date +%H:%M)" + +sdepnotify() { + sdep -w "" -s "" | while read text; do $notify "$title" "$text"; done +} + +# One-off events +sdepnotify <"/home/sebastiano/.local/share/sdep/once" + +# Daily events +sed "s/^/$(date +%Y-%m-%d) /" <"/home/sebastiano/.local/share/sdep/daily" | sdepnotify + +# Weekly events - needs GNU date (try -j intead of -d on BSD) +while read line; do + weekday=$(echo "$line" | sed "s/ .*$//") + echo "$line" | sed "s/^[ ]*[^ ]* /$(date -d $weekday +%Y-%m-%d) /" +done <"/home/sebastiano/.local/share/sdep/weekly" | \ +sdepnotify + +# Monthly events +sed "s/^[ ]*/$(date +%Y-%m-)/" <"/home/sebastiano/.local/share/sdep/daily" | sdepnotify diff --git a/scripts-build/sdep-clear b/scripts-build/sdep-clear @@ -0,0 +1,11 @@ +#!/bin/sh + +# Removes old events from specified file (default: /home/sebastiano/.local/share/sdep/once). + +# Usage: sdep-clear [file] + +file="/home/sebastiano/.local/share/sdep/${1:-once}" +temp=$(mktemp) + +sdep -t <"$file" >"$temp" +mv "$temp" "$file" diff --git a/scripts-build/sdep-edit b/scripts-build/sdep-edit @@ -0,0 +1,11 @@ +#!/bin/sh + +# Open specified file in sdep folder in editor. + +# Usage: sdep-edit [file] +# No options = once + +file="/home/sebastiano/.local/share/sdep/${1:-once}" +editor=${VISUAL:-vi} + +$editor "$file" diff --git a/scripts-build/sdep-list b/scripts-build/sdep-list @@ -0,0 +1,65 @@ +#!/bin/sh + +# Lists events happening in a specific time range. +# Recurring events are listed at most once, and only if their first occurrence +# is in the range. +# +# The events are read from the following files in the /home/sebastiano/.local/share/sdep folder: +# once: events that only happen once; full date needs to be specified +# daily: events that happen every day; only specify the time in HH:MM format +# weekly: only specify Weekday + time +# monthly: only specify day of the month + time + +# This script uses relies on the non-portable -d option of GNU date. + +# Usage: sdep-list [today|tomorrow|week|nextweek|past|future] +# No options = all + +from="" +to="" +w="%d %b %H:%M" + +case $1 in + today) + from="$(date +%Y-%m-%d) 0:00" + to="$(date +%Y-%m-%d) 23:59" + w="%H:%M" + ;; + tomorrow) + from="$(date -d tomorrow +%Y-%m-%d) 0:00" + to="$(date -d tomorrow +%Y-%m-%d) 23:59" + w="%H:%M" + ;; + week) + from="$(date -d 'last monday' +%Y-%m-%d) 0:00" + to="$(date -d sunday +%Y-%m-%d) 23:59" + w="%a %H:%M" + ;; + nextweek) + from="$(date -d 'next monday' +%Y-%m-%d) 0:00" + to="$(date -d 'next monday + 6 days' +%Y-%m-%d) 23:59" + w="%a %H:%M" + ;; + past) + to="$(date +'%Y-%m-%d %H:%M')" + ;; + future) + from="$(date +'%Y-%m-%d %H:%M')" + ;; + *) + ;; +esac + +tempfile=$(mktemp) + +cat "/home/sebastiano/.local/share/sdep/once" > "$tempfile" +sed "s/^/$(date +%Y-%m-%d) /" <"/home/sebastiano/.local/share/sdep/daily" | >> "$tempfile" +while read line; do + weekday=$(echo "$line" | sed "s/ .*$//") + echo "$line" | sed "s/^[ ]*[^ ]* /$(date -d $weekday +%Y-%m-%d) /" +done <"/home/sebastiano/.local/share/sdep/weekly" >> "$tempfile" +sed "s/^[ ]*/$(date +%Y-%m-)/" <"/home/sebastiano/.local/share/sdep/daily" >> "$tempfile" + +sdep -w "$w" -f "$from" -t "$to" <"$tempfile" + +rm "$tempfile" diff --git a/scripts/sdep-checkpast b/scripts/sdep-checkpast @@ -0,0 +1,21 @@ +#!/bin/sh + +# Run this at boot to receive a notification about past events that you might +# have missed +# +# The events are read from the following files in SDEPDATA folder: +# once: events that only happen once; full date needs to be specified +# daily: events that happen every day; only specify the time in HH:MM format +# weekly: only specify Weekday + time +# monthly: only specify day of the month + time + +# Requires: notify-send. + +notify="notify-send -t 3600000" + +sdep-list past | \ +while read text; do + date=$(echo "$text" | sed 's/\t.*//') + event=$(echo "$text" | sed 's/.*\t//') + $notify "$date" "$event" +done diff --git a/sdep.o b/sdep.o Binary files differ.