about summary refs log tree commit diff stats
path: root/todo
diff options
context:
space:
mode:
Diffstat (limited to 'todo')
-rwxr-xr-xtodo70
1 files changed, 70 insertions, 0 deletions
diff --git a/todo b/todo
new file mode 100755
index 0000000..7243f77
--- /dev/null
+++ b/todo
@@ -0,0 +1,70 @@
+#!/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