about summary refs log blame commit diff stats
path: root/todo
blob: 7243f77f3027acd8887b4f6ea3937e398dfd8e7f (plain) (tree)





































































                                                                              
#!/bin/sh

#preset vars
EDITOR=${EDITOR:-vi}
TODO=${TODO:-$HOME/todo}
#empty opt vars
ADD=""
DELETE=""
NUM=""
CHANGE=""
ARCHIVE=""

ug_err()
{
	echo "${1}" 1>&2 && return "${2:-1}"
}
usage()
{
	ug_err "usage: ${0##*/} [[-e | -x ] | [-n num] [-a message | -d [num]]
	-e		edit todo in $EDITOR
	-x		show completed tasks
	-n num		operate on line num
	-a string	add string to todo
	-d [num]	delete line num"
}
while getopts a:d:en:x arg; do
	case ${arg} in
	a)	ADD=${OPTARG};;
	d)	DELETE=true
	 	NUM=${OPTARG};;
	e)	CHANGE=true;;
	n)	NUM=${OPTARG};;
	x)	ARCHIVE=true;;
	*)	usage;;
	esac
done
#satisfies -a
if [ -n "$ADD" ]; then
	if [ -n "$NUM" ]; then
		TMP=$(mktemp)
		sed "${NUM}i\\
$ADD
" < "$TODO" > "$TMP" && mv "$TMP" "$TODO"
	else
		printf '%s\n' "$ADD" >> "$TODO"
	fi
	exit
fi
#satisfies -d
if [ -n "$DELETE" ]; then
	TMP=$(mktemp)
	date +"%F %T - $(sed -n "${NUM}p" "$TODO")" >> "${TODO}.complete"
	sed "${NUM}D" < "$TODO" > "$TMP" && mv "$TMP" "$TODO"
	exit
fi
#satisfies -e
if [ -n "$CHANGE" ]; then
	"$EDITOR" "$TODO"
	exit
fi
#satisfies -x and no flags
if [ -z "$ADD" ] && [ -z "$DELETE" ] && [ -z "$CHANGE" ]; then
if [ -n "$ARCHIVE" ]; then
	! [ -e "${TODO}.complete" ] && touch "${TODO}.complete"
	cat < "${TODO}.complete"
elif [ -z "$*" ]; then
	nl "${TODO}"
fi
exit
fi