From 586abe8282e8abdb77ef4624608d8f038a2e901a Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sat, 7 Mar 2009 04:16:13 +0800 Subject: [PATCH] Cleaning indentation and mix of tabs/spaces, nothing else I swear ;-) Signed-off-by: ginatrapani --- todo.cfg | 12 +- todo.sh | 822 ++++++++++++++++++++++++++----------------------------- 2 files changed, 399 insertions(+), 435 deletions(-) diff --git a/todo.cfg b/todo.cfg index 3c858ee..7e7c27f 100644 --- a/todo.cfg +++ b/todo.cfg @@ -1,14 +1,14 @@ # === EDIT FILE LOCATIONS BELOW === # Your todo.txt directory -#TODO_DIR="/Users/gina/Documents/todo" -TODO_DIR="C:/Documents and Settings/gina/My Documents" +#TODO_DIR="/Users/gina/Documents/todo" +TODO_DIR="C:/Documents and Settings/gina/My Documents" # Your todo/done/report.txt locations -TODO_FILE="$TODO_DIR/todo.txt" -DONE_FILE="$TODO_DIR/done.txt" -REPORT_FILE="$TODO_DIR/report.txt" -TMP_FILE="$TODO_DIR/todo.tmp" +TODO_FILE="$TODO_DIR/todo.txt" +DONE_FILE="$TODO_DIR/done.txt" +REPORT_FILE="$TODO_DIR/report.txt" +TMP_FILE="$TODO_DIR/todo.tmp" # == EDIT FILE LOCATIONS ABOVE === diff --git a/todo.sh b/todo.sh index d722ec8..808777e 100644 --- a/todo.sh +++ b/todo.sh @@ -17,22 +17,22 @@ EndVersion usage() { - sed -e 's/^ //' <> "$DONE_FILE" - sed -i.bak '/^x /d' "$TODO_FILE" - cp "$TODO_FILE" "$TMP_FILE" - sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' "$TMP_FILE" > "$TODO_FILE" - #[[ $VERBOSE = 1 ]] && echo "TODO: Duplicate tasks have been removed." - [[ $VERBOSE = 1 ]] && echo "TODO: $TODO_FILE archived." - cleanup + #defragment blank lines + sed -i.bak -e '/./!d' "$TODO_FILE" + [[ $VERBOSE = 1 ]] && grep "^x " "$TODO_FILE" + grep "^x " "$TODO_FILE" >> "$DONE_FILE" + sed -i.bak '/^x /d' "$TODO_FILE" + cp "$TODO_FILE" "$TMP_FILE" + sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' "$TMP_FILE" > "$TODO_FILE" + #[[ $VERBOSE = 1 ]] && echo "TODO: Duplicate tasks have been removed." + [[ $VERBOSE = 1 ]] && echo "TODO: $TODO_FILE archived." + cleanup } @@ -199,32 +199,32 @@ while getopts ":fhpnatvVd:" Option do case $Option in a ) - AUTO_ARCHIVE=0 - ;; - d ) - CFG_FILE=$OPTARG - ;; + AUTO_ARCHIVE=0 + ;; + d ) + CFG_FILE=$OPTARG + ;; f ) - FORCE=1 - ;; + FORCE=1 + ;; h ) - help - ;; + help + ;; n ) - PRESERVE_LINE_NUMBERS=0 - ;; + PRESERVE_LINE_NUMBERS=0 + ;; p ) - PLAIN=1 - ;; + PLAIN=1 + ;; t ) - DATE_ON_ADD=1 - ;; - v ) - VERBOSE=1 - ;; + DATE_ON_ADD=1 + ;; + v ) + VERBOSE=1 + ;; V ) - version - ;; + version + ;; esac done shift $(($OPTIND - 1)) @@ -234,7 +234,7 @@ shift $(($OPTIND - 1)) if [ -e "$CFG_FILE_ALT" ] then - CFG_FILE="$CFG_FILE_ALT" + CFG_FILE="$CFG_FILE_ALT" fi } @@ -244,21 +244,20 @@ shift $(($OPTIND - 1)) . "$CFG_FILE" [ -z "$1" ] && usage -[ -d "$TODO_DIR" ] || die "Fatal Error: $TODO_DIR is not a directory" +[ -d "$TODO_DIR" ] || die "Fatal Error: $TODO_DIR is not a directory" cd "$TODO_DIR" || die "Fatal Error: Unable to cd to $TODO_DIR" -echo '' > "$TMP_FILE" || die "Fatal Error: Unable to write in $TODO_DIR" +echo '' > "$TMP_FILE" || die "Fatal Error: Unable to write in $TODO_DIR" [ -f "$TODO_FILE" ] || cp /dev/null "$TODO_FILE" [ -f "$DONE_FILE" ] || cp /dev/null "$DONE_FILE" [ -f "$REPORT_FILE" ] || cp /dev/null "$REPORT_FILE" - if [ $PLAIN = 1 ]; then - PRI_A=$NONE - PRI_B=$NONE - PRI_C=$NONE - PRI_X=$NONE - DEFAULT=$NONE + PRI_A=$NONE + PRI_B=$NONE + PRI_C=$NONE + PRI_X=$NONE + DEFAULT=$NONE fi # === HEAVY LIFTING === @@ -267,440 +266,405 @@ shopt -s extglob # == HANDLE ACTION == action=$( printf "%s\n" "$1" | tr 'A-Z' 'a-z' ) -case $action in +case $action in "add" | "a") - if [[ -z "$2" && $FORCE = 0 ]]; then - echo -n "Add: " - read input - else - [ -z "$2" ] && die "usage: $0 add \"TODO ITEM\"" - shift - input=$* - fi + if [[ -z "$2" && $FORCE = 0 ]]; then + echo -n "Add: " + read input + else + [ -z "$2" ] && die "usage: $0 add \"TODO ITEM\"" + shift + input=$* + fi - - if [[ $DATE_ON_ADD = 1 ]]; then - now=`date '+%Y-%m-%d'` - input="$now $input" - fi - - echo "$input" >> "$TODO_FILE" - + if [[ $DATE_ON_ADD = 1 ]]; then + now=`date '+%Y-%m-%d'` + input="$now $input" + fi + echo "$input" >> "$TODO_FILE" + TASKNUM=$(wc -l "$TODO_FILE" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') + [[ $VERBOSE = 1 ]] && echo "TODO: '$input' added on line $TASKNUM." + cleanup;; - - TASKNUM=$(wc -l "$TODO_FILE" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') - [[ $VERBOSE = 1 ]] && echo "TODO: '$input' added on line $TASKNUM." - cleanup;; - "addto" ) - [ -z "$2" ] && die "usage: $0 addto DEST \"TODO ITEM\"" - dest="$TODO_DIR/$2" + [ -z "$2" ] && die "usage: $0 addto DEST \"TODO ITEM\"" + dest="$TODO_DIR/$2" + [ -z "$3" ] && die "usage: $0 addto DEST \"TODO ITEM\"" + shift + shift + input=$* - [ -z "$3" ] && die "usage: $0 addto DEST \"TODO ITEM\"" - shift - shift - input=$* - - if [ -f "$dest" ]; then - - echo "$input" >> "$dest" - - TASKNUM=$(wc -l "$dest" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') - [[ $VERBOSE = 1 ]] && echo "TODO: '$input' added to $dest on line $TASKNUM." - else - echo "TODO: Destination file $dest does not exist." - fi - cleanup;; + if [ -f "$dest" ]; then + echo "$input" >> "$dest" + TASKNUM=$(wc -l "$dest" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') + [[ $VERBOSE = 1 ]] && echo "TODO: '$input' added to $dest on line $TASKNUM." + else + echo "TODO: Destination file $dest does not exist." + fi + cleanup;; "append" | "app" ) - errmsg="usage: $0 append ITEM# \"TEXT TO APPEND\"" - shift; item=$1; shift + errmsg="usage: $0 append ITEM# \"TEXT TO APPEND\"" + shift; item=$1; shift - [ -z "$item" ] && die "$errmsg" - [[ "$item" = +([0-9]) ]] || die "$errmsg" - - todo=$(sed "$item!d" "$TODO_FILE") - [ -z "$todo" ] && die "$item: No such todo." - - - if [[ -z "$1" && $FORCE = 0 ]]; then - echo -n "Append: " - read input - else - input=$* - fi - - if sed -i.bak $item" s|^.*|& $input|" "$TODO_FILE"; then - newtodo=$(sed "$item!d" "$TODO_FILE") - [[ $VERBOSE = 1 ]] && echo "$item: $newtodo" - else - echo "TODO: Error appending task $item." - fi - cleanup;; + [ -z "$item" ] && die "$errmsg" + [[ "$item" = +([0-9]) ]] || die "$errmsg" + todo=$(sed "$item!d" "$TODO_FILE") + [ -z "$todo" ] && die "$item: No such todo." + if [[ -z "$1" && $FORCE = 0 ]]; then + echo -n "Append: " + read input + else + input=$* + fi + if sed -i.bak $item" s|^.*|& $input|" "$TODO_FILE"; then + newtodo=$(sed "$item!d" "$TODO_FILE") + [[ $VERBOSE = 1 ]] && echo "$item: $newtodo" + else + echo "TODO: Error appending task $item." + fi + cleanup;; "archive" ) - archive;; + archive;; "del" | "rm" ) - # replace deleted line with a blank line when PRESERVE_LINE_NUMBERS is 1 - errmsg="usage: $0 del ITEM#" - item=$2 - [ -z "$item" ] && die "$errmsg" - - if [ -z "$3" ]; then - - [[ "$item" = +([0-9]) ]] || die "$errmsg" - if sed -ne "$item p" "$TODO_FILE" | grep "^."; then - DELETEME=$(sed "$2!d" "$TODO_FILE") + # replace deleted line with a blank line when PRESERVE_LINE_NUMBERS is 1 + errmsg="usage: $0 del ITEM#" + item=$2 + [ -z "$item" ] && die "$errmsg" - if [ $FORCE = 0 ]; then - echo "Delete '$DELETEME'? (y/n)" - read ANSWER - else - ANSWER="y" - fi - - if [ "$ANSWER" = "y" ]; then - if [ $PRESERVE_LINE_NUMBERS = 0 ]; then - # delete line (changes line numbers) - sed -i.bak -e $2"s/^.*//" -e '/./!d' "$TODO_FILE" - else - # leave blank line behind (preserves line numbers) - sed -i.bak -e $2"s/^.*//" "$TODO_FILE" - fi - [[ $VERBOSE = 1 ]] && echo "TODO: '$DELETEME' deleted." - cleanup + if [ -z "$3" ]; then - else - echo "TODO: No tasks were deleted." - fi - else - echo "$item: No such todo." - fi + [[ "$item" = +([0-9]) ]] || die "$errmsg" + if sed -ne "$item p" "$TODO_FILE" | grep "^."; then + DELETEME=$(sed "$2!d" "$TODO_FILE") + + if [ $FORCE = 0 ]; then + echo "Delete '$DELETEME'? (y/n)" + read ANSWER + else + ANSWER="y" + fi + if [ "$ANSWER" = "y" ]; then + if [ $PRESERVE_LINE_NUMBERS = 0 ]; then + # delete line (changes line numbers) + sed -i.bak -e $2"s/^.*//" -e '/./!d' "$TODO_FILE" + else + # leave blank line behind (preserves line numbers) + sed -i.bak -e $2"s/^.*//" "$TODO_FILE" + fi + [[ $VERBOSE = 1 ]] && echo "TODO: '$DELETEME' deleted." + cleanup + else + echo "TODO: No tasks were deleted." + fi + else + echo "$item: No such todo." + fi else - sed -i.bak -e $item"s/$3/ /g" "$TODO_FILE" - [[ $VERBOSE = 1 ]] && echo "TODO: $3 removed from $item." + sed -i.bak -e $item"s/$3/ /g" "$TODO_FILE" + [[ $VERBOSE = 1 ]] && echo "TODO: $3 removed from $item." fi ;; "depri" | "dp" ) - item=$2 - errmsg="usage: $0 depri ITEM#" + item=$2 + errmsg="usage: $0 depri ITEM#" - todo=$(sed "$item!d" "$TODO_FILE") - [ -z "$todo" ] && die "$item: No such todo." - [[ "$item" = +([0-9]) ]] || die "$errmsg" + todo=$(sed "$item!d" "$TODO_FILE") + [ -z "$todo" ] && die "$item: No such todo." + [[ "$item" = +([0-9]) ]] || die "$errmsg" - sed -e $item"s/^(.*) //" "$TODO_FILE" > /dev/null 2>&1 + sed -e $item"s/^(.*) //" "$TODO_FILE" > /dev/null 2>&1 - if [ "$?" -eq 0 ]; then - #it's all good, continue - sed -i.bak -e $2"s/^(.*) //" "$TODO_FILE" - NEWTODO=$(sed "$2!d" "$TODO_FILE") - [[ $VERBOSE = 1 ]] && echo -e "`echo "$item: $NEWTODO"`" - [[ $VERBOSE = 1 ]] && echo "TODO: $item deprioritized." - cleanup - else - die "$errmsg" - fi;; + if [ "$?" -eq 0 ]; then + #it's all good, continue + sed -i.bak -e $2"s/^(.*) //" "$TODO_FILE" + NEWTODO=$(sed "$2!d" "$TODO_FILE") + [[ $VERBOSE = 1 ]] && echo -e "`echo "$item: $NEWTODO"`" + [[ $VERBOSE = 1 ]] && echo "TODO: $item deprioritized." + cleanup + else + die "$errmsg" + fi;; "do" ) - errmsg="usage: $0 do ITEM#" - item=$2 - [ -z "$item" ] && die "$errmsg" - [[ "$item" = +([0-9]) ]] || die "$errmsg" + errmsg="usage: $0 do ITEM#" + item=$2 + [ -z "$item" ] && die "$errmsg" + [[ "$item" = +([0-9]) ]] || die "$errmsg" - todo=$(sed "$item!d" "$TODO_FILE") - [ -z "$todo" ] && die "$item: No such todo." - - now=`date '+%Y-%m-%d'` - # remove priority once item is done - sed -i.bak $item"s/^(.*) //" "$TODO_FILE" - sed -i.bak $item"s|^|&x $now |" "$TODO_FILE" - newtodo=$(sed "$item!d" "$TODO_FILE") - [[ $VERBOSE = 1 ]] && echo "$item: $newtodo" - [[ $VERBOSE = 1 ]] && echo "TODO: $item marked as done." + todo=$(sed "$item!d" "$TODO_FILE") + [ -z "$todo" ] && die "$item: No such todo." - if [ $AUTO_ARCHIVE = 1 ]; then - archive - fi + now=`date '+%Y-%m-%d'` + # remove priority once item is done + sed -i.bak $item"s/^(.*) //" "$TODO_FILE" + sed -i.bak $item"s|^|&x $now |" "$TODO_FILE" + newtodo=$(sed "$item!d" "$TODO_FILE") + [[ $VERBOSE = 1 ]] && echo "$item: $newtodo" + [[ $VERBOSE = 1 ]] && echo "TODO: $item marked as done." - cleanup ;; + if [ $AUTO_ARCHIVE = 1 ]; then + archive + fi + cleanup ;; "list" | "ls" ) - item=$2 - if [ -z "$item" ]; then - echo -e "`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" - echo "--" - NUMTASKS=$(wc -l "$TODO_FILE" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') - echo "TODO: $NUMTASKS tasks in $TODO_FILE." - else - command=`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/' | grep -i $item ` - shift - shift - for i in $* - do - command=`echo "$command" | grep -i $i ` - done - command=`echo "$command" | sort -f -k2` - - echo -e "$command" - fi - - cleanup ;; + item=$2 + if [ -z "$item" ]; then + echo -e "`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" + echo "--" + NUMTASKS=$(wc -l "$TODO_FILE" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') + echo "TODO: $NUMTASKS tasks in $TODO_FILE." + else + command=`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/' | grep -i $item ` + shift + shift + for i in $* + do + command=`echo "$command" | grep -i $i ` + done + command=`echo "$command" | sort -f -k2` + echo -e "$command" + fi + cleanup ;; "listall" | "lsa" ) - item=$2 - cat "$TODO_FILE" "$DONE_FILE" > "$TMP_FILE" + item=$2 + cat "$TODO_FILE" "$DONE_FILE" > "$TMP_FILE" - if [ -z "$item" ]; then - echo -e "`sed = "$TMP_FILE" | sed 'N; s/^/ /; s/ *\(.\{3,\}\)\n/\1 /' | sed 's/^ /00/' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" - else - command=`sed = "$TMP_FILE" | sed 'N; s/^/ /; s/ *\(.\{3,\}\)\n/\1 /' | sed 's/^ /00/' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/' | grep -i $item ` - shift - shift - for i in $* - do - command=`echo "$command" | grep -i $i ` - done - command=`echo "$command" | sort -f -k2` - - echo -e "$command" - fi - cleanup ;; + if [ -z "$item" ]; then + echo -e "`sed = "$TMP_FILE" | sed 'N; s/^/ /; s/ *\(.\{3,\}\)\n/\1 /' | sed 's/^ /00/' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" + else + command=`sed = "$TMP_FILE" | sed 'N; s/^/ /; s/ *\(.\{3,\}\)\n/\1 /' | sed 's/^ /00/' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/' | grep -i $item ` + shift + shift + for i in $* + do + command=`echo "$command" | grep -i $i ` + done + command=`echo "$command" | sort -f -k2` + echo -e "$command" + fi + cleanup ;; "listfile" | "lf" ) - src="$TODO_DIR/$2" - - if [ -z "$3" ]; then - item="" - else - item=$3 - fi - - if [ -f "$src" ]; then - if [ -z "$item" ]; then - echo -e "`sed = "$src" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" - if [ $VERBOSE = 1 ]; then - echo "--" - NUMTASKS=$( sed '/./!d' "$src" | wc -l | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') - echo "TODO: $NUMTASKS lines in $src." - fi - else - command=`sed = "$src" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/' | grep -i $item ` - shift - shift - for i in $* - do - command=`echo "$command" | grep -i $i ` - done - command=`echo "$command" | sort -f -k2` + src="$TODO_DIR/$2" - echo -e "$command" - fi - else - echo "TODO: File $src does not exist." - - fi - cleanup ;; + if [ -z "$3" ]; then + item="" + else + item=$3 + fi + if [ -f "$src" ]; then + if [ -z "$item" ]; then + echo -e "`sed = "$src" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" + if [ $VERBOSE = 1 ]; then + echo "--" + NUMTASKS=$( sed '/./!d' "$src" | wc -l | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') + echo "TODO: $NUMTASKS lines in $src." + fi + else + command=`sed = "$src" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/' | grep -i $item ` + shift + shift + for i in $* + do + command=`echo "$command" | grep -i $i ` + done + command=`echo "$command" | sort -f -k2` + echo -e "$command" + fi + else + echo "TODO: File $src does not exist." + fi + cleanup ;; "listcon" | "lsc" ) - gawk '{for(i = 1; i <= NF; i++) print $i}' "$TODO_FILE" | grep '@' | sort | uniq - cleanup ;; + gawk '{for(i = 1; i <= NF; i++) print $i}' "$TODO_FILE" | grep '@' | sort | uniq + cleanup ;; "listproj" | "lsprj" ) - gawk '{for(i = 1; i <= NF; i++) print $i}' "$TODO_FILE" | grep '+' | sort | uniq - cleanup ;; + gawk '{for(i = 1; i <= NF; i++) print $i}' "$TODO_FILE" | grep '+' | sort | uniq + cleanup ;; "listpri" | "lsp" ) - pri=$( printf "%s\n" "$2" | tr 'a-z' 'A-Z' ) - - errmsg="usage: $0 listpri PRIORITY + pri=$( printf "%s\n" "$2" | tr 'a-z' 'A-Z' ) + errmsg="usage: $0 listpri PRIORITY note: PRIORITY must a single letter from A to Z." - if [ -z "$pri" ]; then - echo -e "`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" | grep \([A-Z]\) - if [ $VERBOSE = 1 ]; then - echo "--" - NUMTASKS=$(grep \([A-Z]\) "$TODO_FILE" | wc -l | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') - echo "TODO: $NUMTASKS prioritized tasks in $TODO_FILE." - fi - else - [[ "$pri" = +([A-Z]) ]] || die "$errmsg" + if [ -z "$pri" ]; then + echo -e "`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" | grep \([A-Z]\) + if [ $VERBOSE = 1 ]; then + echo "--" + NUMTASKS=$(grep \([A-Z]\) "$TODO_FILE" | wc -l | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') + echo "TODO: $NUMTASKS prioritized tasks in $TODO_FILE." + fi + else + [[ "$pri" = +([A-Z]) ]] || die "$errmsg" - echo -e "`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" | grep \($pri\) - if [ $VERBOSE = 1 ]; then - echo "--" - NUMTASKS=$(grep \($pri\) "$TODO_FILE" | wc -l | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') - echo "TODO: $NUMTASKS tasks prioritized $pri in $TODO_FILE." - fi + echo -e "`sed = "$TODO_FILE" | sed 'N; s/^/ /; s/ *\(.\{2,\}\)\n/\1 /' | sed 's/^ /0/' | sort -f -k2 | sed 's/^ /0/' | sort -f -k2 | sed '/^[0-9][0-9] x /!s/\(.*(A).*\)/'$PRI_A'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(B).*\)/'$PRI_B'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*(C).*\)/'$PRI_C'\1'$DEFAULT'/g' | sed '/^[0-9][0-9] x /!s/\(.*([A-Z]).*\)/'$PRI_X'\1'$DEFAULT'/'`" | grep \($pri\) + if [ $VERBOSE = 1 ]; then + echo "--" + NUMTASKS=$(grep \($pri\) "$TODO_FILE" | wc -l | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') + echo "TODO: $NUMTASKS tasks prioritized $pri in $TODO_FILE." + fi + fi + cleanup;; - fi - cleanup;; - "move" | "mv" ) + # replace moved line with a blank line when PRESERVE_LINE_NUMBERS is 1 + errmsg="usage: $0 mv ITEM# DEST [SRC]" + item=$2 + dest="$TODO_DIR/$3" + src="$TODO_DIR/$4" - # replace moved line with a blank line when PRESERVE_LINE_NUMBERS is 1 - errmsg="usage: $0 mv ITEM# DEST [SRC]" - - item=$2 - dest="$TODO_DIR/$3" + [ -z "$item" ] && die "$errmsg" + [ -z "$4" ] && src="$TODO_FILE" + [ -z "$dest" ] && die "$errmsg" - src="$TODO_DIR/$4" + [[ "$item" = +([0-9]) ]] || die "$errmsg" - [ -z "$item" ] && die "$errmsg" + if [ -f "$src" ]; then + if [ -f "$dest" ]; then + if sed -ne "$item p" "$src" | grep "^."; then + MOVEME=$(sed "$item!d" "$src") + if [ $FORCE = 0 ]; then + echo "Move '$MOVEME' from $src to $dest? (y/n)" + read ANSWER + else + ANSWER="y" + fi + if [ "$ANSWER" = "y" ]; then + if [ $PRESERVE_LINE_NUMBERS = 0 ]; then + # delete line (changes line numbers) + sed -i.bak -e $item"s/^.*//" -e '/./!d' "$src" + else + # leave blank line behind (preserves line numbers) + sed -i.bak -e $item"s/^.*//" "$src" + fi + echo "$MOVEME" >> "$dest" - [ -z "$4" ] && src="$TODO_FILE" - [ -z "$dest" ] && die "$errmsg" - - [[ "$item" = +([0-9]) ]] || die "$errmsg" - - if [ -f "$src" ]; then - if [ -f "$dest" ]; then - - if sed -ne "$item p" "$src" | grep "^."; then - MOVEME=$(sed "$item!d" "$src") - - if [ $FORCE = 0 ]; then - echo "Move '$MOVEME' from $src to $dest? (y/n)" - read ANSWER - else - ANSWER="y" - fi - - if [ "$ANSWER" = "y" ]; then - if [ $PRESERVE_LINE_NUMBERS = 0 ]; then - # delete line (changes line numbers) - sed -i.bak -e $item"s/^.*//" -e '/./!d' "$src" - else - # leave blank line behind (preserves line numbers) - sed -i.bak -e $item"s/^.*//" "$src" - fi - echo "$MOVEME" >> "$dest" - - [[ $VERBOSE = 1 ]] && echo "TODO: '$MOVEME' moved from '$src' to '$dest'." - cleanup - - else - echo "TODO: No tasks moved." - fi - else - echo "$item: No such item in $src." - fi - - else - echo "TODO: Destination file $dest does not exist." - fi - else - echo "TODO: Source file $src does not exist." - fi - cleanup;; + [[ $VERBOSE = 1 ]] && echo "TODO: '$MOVEME' moved from '$src' to '$dest'." + cleanup + else + echo "TODO: No tasks moved." + fi + else + echo "$item: No such item in $src." + fi + else + echo "TODO: Destination file $dest does not exist." + fi + else + echo "TODO: Source file $src does not exist." + fi + cleanup;; "prepend" | "prep" ) - errmsg="usage: $0 prepend ITEM# \"TEXT TO PREPEND\"" - shift; item=$1; shift - - [ -z "$item" ] && die "$errmsg" - [[ "$item" = +([0-9]) ]] || die "$errmsg" - - - todo=$(sed "$item!d" "$TODO_FILE") - [ -z "$todo" ] && die "$item: No such todo." + errmsg="usage: $0 prepend ITEM# \"TEXT TO PREPEND\"" + shift; item=$1; shift - if [[ -z "$1" && $FORCE = 0 ]]; then - echo -n "Prepend: " - read input - else - input=$* - fi + [ -z "$item" ] && die "$errmsg" + [[ "$item" = +([0-9]) ]] || die "$errmsg" + + todo=$(sed "$item!d" "$TODO_FILE") + [ -z "$todo" ] && die "$item: No such todo." + + if [[ -z "$1" && $FORCE = 0 ]]; then + echo -n "Prepend: " + read input + else + input=$* + fi + + if sed -i.bak $item" s|^.*|$input &|" "$TODO_FILE"; then + newtodo=$(sed "$item!d" "$TODO_FILE") + [[ $VERBOSE = 1 ]] && echo "$item: $newtodo" + else + echo "TODO: Error prepending task $item." + fi + cleanup;; - if sed -i.bak $item" s|^.*|$input &|" "$TODO_FILE"; then - newtodo=$(sed "$item!d" "$TODO_FILE") - [[ $VERBOSE = 1 ]] && echo "$item: $newtodo" - else - echo "TODO: Error prepending task $item." - fi - cleanup;; - "pri" | "p" ) - item=$2 - newpri=$( printf "%s\n" "$3" | tr 'a-z' 'A-Z' ) + item=$2 + newpri=$( printf "%s\n" "$3" | tr 'a-z' 'A-Z' ) - errmsg="usage: $0 pri ITEM# PRIORITY + errmsg="usage: $0 pri ITEM# PRIORITY note: PRIORITY must be anywhere from A to Z." - [ "$#" -ne 3 ] && die "$errmsg" - [[ "$item" = +([0-9]) ]] || die "$errmsg" - [[ "$newpri" = +([A-Z]) ]] || die "$errmsg" + [ "$#" -ne 3 ] && die "$errmsg" + [[ "$item" = +([0-9]) ]] || die "$errmsg" + [[ "$newpri" = +([A-Z]) ]] || die "$errmsg" - sed -e $item"s/^(.*) //" -e $item"s/^/($newpri) /" "$TODO_FILE" > /dev/null 2>&1 + sed -e $item"s/^(.*) //" -e $item"s/^/($newpri) /" "$TODO_FILE" > /dev/null 2>&1 + + if [ "$?" -eq 0 ]; then + #it's all good, continue + sed -i.bak -e $2"s/^(.*) //" -e $2"s/^/($newpri) /" "$TODO_FILE" + NEWTODO=$(sed "$2!d" "$TODO_FILE") + [[ $VERBOSE = 1 ]] && echo -e "`echo "$item: $NEWTODO"`" + [[ $VERBOSE = 1 ]] && echo "TODO: $item prioritized ($newpri)." + cleanup + else + die "$errmsg" + fi;; - if [ "$?" -eq 0 ]; then - #it's all good, continue - sed -i.bak -e $2"s/^(.*) //" -e $2"s/^/($newpri) /" "$TODO_FILE" - NEWTODO=$(sed "$2!d" "$TODO_FILE") - [[ $VERBOSE = 1 ]] && echo -e "`echo "$item: $NEWTODO"`" - [[ $VERBOSE = 1 ]] && echo "TODO: $item prioritized ($newpri)." - cleanup - else - die "$errmsg" - fi;; - "replace" ) - errmsg="usage: $0 replace ITEM# \"UPDATED ITEM\"" - shift; item=$1; shift + errmsg="usage: $0 replace ITEM# \"UPDATED ITEM\"" + shift; item=$1; shift - [ -z "$item" ] && die "$errmsg" - [[ "$item" = +([0-9]) ]] || die "$errmsg" - - todo=$(sed "$item!d" "$TODO_FILE") - [ -z "$todo" ] && die "$item: No such todo." + [ -z "$item" ] && die "$errmsg" + [[ "$item" = +([0-9]) ]] || die "$errmsg" - - if [[ -z "$1" && $FORCE = 0 ]]; then - echo -n "Replacement: " - read input - else - input=$* - fi - - sed -i.bak $item" s|^.*|$input|" "$TODO_FILE" - [[ $VERBOSE = 1 ]] && NEWTODO=$(head -$item "$TODO_FILE" | tail -1) - [[ $VERBOSE = 1 ]] && echo "replaced with" - [[ $VERBOSE = 1 ]] && echo "$item: $NEWTODO" - cleanup;; + todo=$(sed "$item!d" "$TODO_FILE") + [ -z "$todo" ] && die "$item: No such todo." + + if [[ -z "$1" && $FORCE = 0 ]]; then + echo -n "Replacement: " + read input + else + input=$* + fi + + sed -i.bak $item" s|^.*|$input|" "$TODO_FILE" + [[ $VERBOSE = 1 ]] && NEWTODO=$(head -$item "$TODO_FILE" | tail -1) + [[ $VERBOSE = 1 ]] && echo "replaced with" + [[ $VERBOSE = 1 ]] && echo "$item: $NEWTODO" + cleanup;; "report" ) - #archive first - sed '/^x /!d' "$TODO_FILE" >> "$DONE_FILE" - sed -i.bak '/^x /d' "$TODO_FILE" + #archive first + sed '/^x /!d' "$TODO_FILE" >> "$DONE_FILE" + sed -i.bak '/^x /d' "$TODO_FILE" NUMLINES=$(wc -l "$TODO_FILE" | sed 's/^[[:space:]]*\([0-9]*\).*/\1/') if [ $NUMLINES = "0" ]; then echo "datetime todos dones" >> "$REPORT_FILE" fi - #now report - TOTAL=$(cat "$TODO_FILE" | wc -l | sed 's/^[ \t]*//') - TDONE=$(cat "$DONE_FILE" | wc -l | sed 's/^[ \t]*//') - TECHO=$(echo $(date +%Y-%m-%d-%T); echo ' '; echo $TOTAL; echo ' '; - echo $TDONE) - echo $TECHO >> "$REPORT_FILE" - [[ $VERBOSE = 1 ]] && echo "TODO: Report file updated." - cat "$REPORT_FILE" - cleanup;; + #now report + TOTAL=$(cat "$TODO_FILE" | wc -l | sed 's/^[ \t]*//') + TDONE=$(cat "$DONE_FILE" | wc -l | sed 's/^[ \t]*//') + TECHO=$(echo $(date +%Y-%m-%d-%T); echo ' '; echo $TOTAL; echo ' '; + echo $TDONE) + echo $TECHO >> "$REPORT_FILE" + [[ $VERBOSE = 1 ]] && echo "TODO: Report file updated." + cat "$REPORT_FILE" + cleanup;; + * ) - usage - if [ -d "$HOME/.todo.actions.d" ] - then - if [ -x "$HOME/.todo.actions.d/$action" ] - then - CFG_FILE="$CFG_FILE" "$HOME/.todo.actions.d/$action" "$@" - else - usage - fi - else - usage - fi -esac \ No newline at end of file + usage + if [ -d "$HOME/.todo.actions.d" ]; then + if [ -x "$HOME/.todo.actions.d/$action" ]; then + CFG_FILE="$CFG_FILE" "$HOME/.todo.actions.d/$action" "$@" + else + usage + fi + else + usage + fi +esac