#!/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