ENH: Sentence delimiters for append action.

This fixes a personal annoyance.
If the text to be appended to the task begins with one of the delimiter characters, no whitespace is inserted in between. This makes appending to an enumeration (todo.sh add 42 ", foo") syntactically correct.
The list of delimiters is configurable (for personal preferences / non-English languages) via SENTENCE_DELIMITERS in the config file.
This commit is contained in:
Ingo Karkat
2010-07-05 13:49:58 +02:00
parent 5e44868261
commit 2f4ba26994
2 changed files with 40 additions and 1 deletions

View File

@@ -44,4 +44,33 @@ test_todo_session 'append error' << EOF
10: No such task. 10: No such task.
EOF EOF
cat > todo.txt <<EOF
notice the daisies
EOF
test_todo_session 'append of current sentence' <<EOF
>>> todo.sh append 1 ", lilies and roses"
1: notice the daisies, lilies and roses
>>> todo.sh append 1 "; see the wasps"
1: notice the daisies, lilies and roses; see the wasps
>>> todo.sh append 1 "& bees"
1: notice the daisies, lilies and roses; see the wasps & bees
EOF
cp todo.cfg special-delimiters.cfg
cat >> special-delimiters.cfg <<EOF
export SENTENCE_DELIMITERS='*,.:;&'
EOF
test_todo_session 'append of current sentence SENTENCE_DELIMITERS' <<EOF
>>> todo.sh -d special-delimiters.cfg append 1 "&beans"
1: notice the daisies, lilies and roses; see the wasps & bees&beans
>>> todo.sh -d special-delimiters.cfg append 1 "%foo"
1: notice the daisies, lilies and roses; see the wasps & bees&beans %foo
>>> todo.sh -d special-delimiters.cfg append 1 "*2"
1: notice the daisies, lilies and roses; see the wasps & bees&beans %foo*2
EOF
test_done test_done

12
todo.sh
View File

@@ -469,6 +469,12 @@ export PRI_B=$GREEN # color for B priority
export PRI_C=$LIGHT_BLUE # color for C priority export PRI_C=$LIGHT_BLUE # color for C priority
export PRI_X=$WHITE # color for rest of them export PRI_X=$WHITE # color for rest of them
# Default sentence delimiters for todo.sh append.
# If the text to be appended to the task begins with one of these characters, no
# whitespace is inserted in between. This makes appending to an enumeration
# (todo.sh add 42 ", foo") syntactically correct.
export SENTENCE_DELIMITERS=',.:;'
[ -e "$TODOTXT_CFG_FILE" ] || { [ -e "$TODOTXT_CFG_FILE" ] || {
CFG_FILE_ALT="$HOME/todo.cfg" CFG_FILE_ALT="$HOME/todo.cfg"
@@ -746,9 +752,13 @@ case $action in
else else
input=$* input=$*
fi fi
case "$input" in
[$SENTENCE_DELIMITERS]*) appendspace=;;
*) appendspace=" ";;
esac
cleaninput $input cleaninput $input
if sed -i.bak $item" s|^.*|& $input|" "$TODO_FILE"; then if sed -i.bak $item" s|^.*|&${appendspace}${input}|" "$TODO_FILE"; then
[ $TODOTXT_VERBOSE -gt 0 ] && { [ $TODOTXT_VERBOSE -gt 0 ] && {
newtodo=$(sed "$item!d" "$TODO_FILE") newtodo=$(sed "$item!d" "$TODO_FILE")
echo "$item: $newtodo" echo "$item: $newtodo"