#!/bin/sh set -eu file=/dev/stdin if [ -r "${1:-}" ] && [ -w "${1:-}" ]; then file="$1" shift fi date= arg="${1:-}" args="$*" if [ -z "$arg" ]; then read -p 'When should I tickle you about this message? ' args arg="${args%% *}" fi if [ "$arg" = '-d' ] || [ $# -gt 1 ]; then shift date="$args" else case "$arg" in *[0-9]w) date="now + ${arg%w} weeks 00:00";; *[0-9]m) date="now + ${arg%m} months 00:00";; *[0-9]d) date="now + ${arg%d} days 00:00";; *[0-9]h) date="now + ${arg%h} hours";; @[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) date="@${arg#@}";; *' '*) date="$args";; *[!0-9]*) echo "E: invalid argument: $arg" >&2 exit 1 ;; *) date="now + $arg days 00:00";; esac fi tickle=$(date +'%s (%c)' -d "$date") TMPFILE="$(tempfile -d /tmp -p tickle)" trap "rm -f $TMPFILE" 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15 formail -i "X-Tickle: $tickle" < $file \ | formail -R X-Postponed X-Was-Postponed > $TMPFILE [ -w "$file" ] && mv $TMPFILE $file rm -f $TMPFILE trap - 0 1 2 3 4 5 6 7 8 10 11 12 13 14 15