dotfiles/.todo.actions.d/repeat
2025-04-29 17:53:01 +01:00

60 lines
1.4 KiB
Bash
Executable file

#!/bin/bash
action=$1
shift
function usage {
echo " Customized repeat:"
echo " repeat ITEM "
echo " mark an item complete then re-enter it"
echo " repeat ITEM DAYS"
echo " mark an item as complete then re-enter it with a date DAYS from now"
echo " repeat ITEM +DAYS"
echo " mark an item with a date as complete then re-enter it with a date DAYS from the due date"
echo ""
exit
}
[ "$action" = "usage" ] && usage
# make sure we have an item number
ITEM=$1
if ! [[ "$ITEM" =~ ^[0-9]+$ ]]; then
echo "Error! Usage:"
usage
exit
fi
# pull the line from the todo file
LINE=$(sed "$ITEM!d" "$TODO_FILE")
if [[ "$LINE" =~ ^\([A-Z]\) ]]; then
LINE=$(echo "$LINE" | cut -f2- -d ' ') # cut off the priority
fi
if [[ "$LINE" =~ ^[0-9][0-9][0-9][0-9] ]]; then
DATE=$(echo "$LINE" | cut -f1 -d ' ') # identify the date
LINE=$(echo "$LINE" | cut -f2- -d ' ') # cut off the date
else
DATE=""
fi
DAYS=$2
if [[ "$DAYS" != "" ]]; then
if [[ $DAYS == \+* ]]; then
if [[ "$DATE" != "" ]]; then
# increase the due date
DATE=`date -d $DATE" "$DAYS" days" +%Y-%m-%d`
fi
elif [[ $DAYS == [0-9]* ]]; then
# make new date relative from now
DATE=`date -d $DAYS" days" +%Y-%m-%d`
fi
LINE=$DATE" "$LINE # and append to the line
fi
if [[ "$LINE" != "" ]] ; then
$DO && "$TODO_SH" command do "$ITEM"
$DO && "$TODO_SH" command add "$LINE"
fi