Compare commits
3 Commits
archive/in
...
archive/re
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f45bbd1a1d | ||
|
|
e0b93e48fb | ||
|
|
24d0fb003a |
@@ -1,18 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
make_action()
|
||||
{
|
||||
unset TODO_ACTIONS_DIR
|
||||
[ -d .todo.actions.d ] || mkdir .todo.actions.d
|
||||
cat > ".todo.actions.d/$1" <<EOF
|
||||
#!/bin/bash
|
||||
[ "\$1" = "usage" ] && {
|
||||
echo " $1 ITEM#[, ITEM#, ...] [TERM...]"
|
||||
echo " This custom action does $1."
|
||||
echo ""
|
||||
exit
|
||||
}
|
||||
echo "custom action $1"
|
||||
EOF
|
||||
chmod +x ".todo.actions.d/$1"
|
||||
}
|
||||
@@ -164,4 +164,12 @@ TODO: Replaced task with:
|
||||
1 (A) 2010-07-04 this also has a new date
|
||||
EOF
|
||||
|
||||
echo '2009-02-13 this is just a new one' > todo.txt
|
||||
test_todo_session 'replace with prepended priority and date replaces existing date' <<EOF
|
||||
>>> todo.sh replace 1 '(B) 2010-07-04 this also has a new date'
|
||||
1 2009-02-13 this is just a new one
|
||||
TODO: Replaced task with:
|
||||
1 (B) 2010-07-04 this also has a new date
|
||||
EOF
|
||||
|
||||
test_done
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
|
||||
test_description='help functionality
|
||||
|
||||
This test covers the help output.
|
||||
'
|
||||
. ./actions-test-lib.sh
|
||||
. ./test-lib.sh
|
||||
|
||||
# Note: To avoid having to adapt the test whenever the help documentation
|
||||
# slightly changes, only check for the section headers.
|
||||
test_todo_session 'help output' <<EOF
|
||||
>>> todo.sh help | sed '/^ [A-Z]/!d'
|
||||
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
|
||||
Options:
|
||||
Built-in Actions:
|
||||
EOF
|
||||
|
||||
test_todo_session 'verbose help output' <<EOF
|
||||
>>> todo.sh -v help | sed '/^ [A-Z]/!d'
|
||||
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
|
||||
Options:
|
||||
Built-in Actions:
|
||||
EOF
|
||||
|
||||
test_todo_session 'very verbose help output' <<EOF
|
||||
>>> todo.sh -vv help | sed '/^ [A-Z]/!d'
|
||||
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
|
||||
Options:
|
||||
Environment variables:
|
||||
Built-in Actions:
|
||||
EOF
|
||||
|
||||
make_action "foo"
|
||||
test_todo_session 'help output with custom action' <<EOF
|
||||
>>> todo.sh -v help | sed '/^ [A-Z]/!d'
|
||||
Usage: todo.sh [-fhpantvV] [-d todo_config] action [task_number] [task_description]
|
||||
Options:
|
||||
Built-in Actions:
|
||||
Add-on Actions:
|
||||
EOF
|
||||
|
||||
test_done
|
||||
@@ -1,66 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
test_description='built-in actions help functionality
|
||||
|
||||
This test checks listing the usage help of a built-in action.
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_todo_session 'nonexisting action help' <<'EOF'
|
||||
>>> todo.sh help doesnotexist
|
||||
TODO: No action "doesnotexist" exists.
|
||||
=== 1
|
||||
|
||||
>>> todo.sh help hel
|
||||
TODO: No action "hel" exists.
|
||||
=== 1
|
||||
|
||||
>>> todo.sh help h
|
||||
TODO: No action "h" exists.
|
||||
=== 1
|
||||
EOF
|
||||
|
||||
test_todo_session 'single action help' <<'EOF'
|
||||
>>> todo.sh help shorthelp
|
||||
shorthelp
|
||||
List the one-line usage of all built-in and add-on actions.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_todo_session 'multiple actions help' <<'EOF'
|
||||
>>> todo.sh help shorthelp append
|
||||
shorthelp
|
||||
List the one-line usage of all built-in and add-on actions.
|
||||
\
|
||||
append ITEM# "TEXT TO APPEND"
|
||||
app ITEM# "TEXT TO APPEND"
|
||||
Adds TEXT TO APPEND to the end of the task on line ITEM#.
|
||||
Quotes optional.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_todo_session 'short and long form of action help' <<'EOF'
|
||||
>>> todo.sh help append
|
||||
append ITEM# "TEXT TO APPEND"
|
||||
app ITEM# "TEXT TO APPEND"
|
||||
Adds TEXT TO APPEND to the end of the task on line ITEM#.
|
||||
Quotes optional.
|
||||
\
|
||||
|
||||
>>> todo.sh help app
|
||||
app ITEM# "TEXT TO APPEND"
|
||||
Adds TEXT TO APPEND to the end of the task on line ITEM#.
|
||||
Quotes optional.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_todo_session 'mixed existing and nonexisting action help' <<'EOF'
|
||||
>>> todo.sh help shorthelp doesnotexist list
|
||||
shorthelp
|
||||
List the one-line usage of all built-in and add-on actions.
|
||||
\
|
||||
TODO: No action "doesnotexist" exists.
|
||||
=== 1
|
||||
EOF
|
||||
|
||||
test_done
|
||||
@@ -1,20 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
|
||||
test_description='Bash help completion functionality
|
||||
|
||||
This test checks todo_completion of actions for usage help.
|
||||
'
|
||||
. ./actions-test-lib.sh
|
||||
. ./test-lib.sh
|
||||
make_action "zany"
|
||||
make_action "aardvark"
|
||||
|
||||
readonly ACTIONS='add a addto addm append app archive command del rm depri dp do help list ls listaddons listall lsa listcon lsc listfile lf listpri lsp listproj lsprj move mv prepend prep pri p replace report shorthelp'
|
||||
readonly ADDONS='aardvark zany'
|
||||
|
||||
test_todo_completion 'all actions after help' 'todo.sh help ' "$ACTIONS $ADDONS"
|
||||
test_todo_completion 'all actions after command help' 'todo.sh command help ' "$ACTIONS $ADDONS"
|
||||
test_todo_completion 'actions beginning with a' 'todo.sh help a' 'add a addto addm append app archive aardvark'
|
||||
|
||||
test_done
|
||||
@@ -4,9 +4,19 @@ test_description='custom actions functionality
|
||||
|
||||
This test covers the contract between todo.sh and custom actions.
|
||||
'
|
||||
. ./actions-test-lib.sh
|
||||
. ./test-lib.sh
|
||||
|
||||
unset TODO_ACTIONS_DIR
|
||||
mkdir .todo.actions.d
|
||||
make_action()
|
||||
{
|
||||
cat > ".todo.actions.d/$1" <<- EOF
|
||||
#!/bin/bash
|
||||
echo "custom action $1"
|
||||
EOF
|
||||
chmod +x ".todo.actions.d/$1"
|
||||
}
|
||||
|
||||
make_action "foo"
|
||||
test_todo_session 'executable action' <<EOF
|
||||
>>> todo.sh foo
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
test_description='listaddons functionality
|
||||
|
||||
This test checks listing of custom actions.
|
||||
'
|
||||
. ./actions-test-lib.sh
|
||||
. ./test-lib.sh
|
||||
|
||||
test_todo_session 'no custom actions' <<EOF
|
||||
>>> todo.sh listaddons
|
||||
EOF
|
||||
|
||||
make_action "foo"
|
||||
test_todo_session 'one custom action' <<EOF
|
||||
>>> todo.sh listaddons
|
||||
foo
|
||||
EOF
|
||||
|
||||
make_action "bar"
|
||||
make_action "ls"
|
||||
make_action "quux"
|
||||
test_todo_session 'multiple custom actions' <<EOF
|
||||
>>> todo.sh listaddons
|
||||
bar
|
||||
foo
|
||||
ls
|
||||
quux
|
||||
EOF
|
||||
|
||||
chmod -x .todo.actions.d/foo
|
||||
# On Cygwin, clearing the executable flag may have no effect, as the Windows ACL
|
||||
# may still grant execution rights. In this case, we skip the test.
|
||||
if [ -x .todo.actions.d/foo ]; then
|
||||
SKIP_TESTS="${SKIP_TESTS}${SKIP_TESTS+ }t8010.4"
|
||||
fi
|
||||
test_todo_session 'nonexecutable action' <<EOF
|
||||
>>> todo.sh listaddons
|
||||
bar
|
||||
ls
|
||||
quux
|
||||
EOF
|
||||
|
||||
test_done
|
||||
@@ -1,76 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
test_description='custom actions help functionality
|
||||
|
||||
This test checks listing the usage help of a custom action.
|
||||
'
|
||||
. ./actions-test-lib.sh
|
||||
. ./test-lib.sh
|
||||
|
||||
test_todo_session 'custom action help with no custom action directory' <<'EOF'
|
||||
>>> todo.sh help foo
|
||||
TODO: No action "foo" exists.
|
||||
=== 1
|
||||
EOF
|
||||
|
||||
make_action "foo"
|
||||
make_action "bar"
|
||||
make_action "ls"
|
||||
make_action "quux"
|
||||
|
||||
test_todo_session 'custom action help' <<'EOF'
|
||||
>>> todo.sh help foo
|
||||
foo ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does foo.
|
||||
\
|
||||
|
||||
>>> todo.sh help bar
|
||||
bar ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does bar.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_todo_session 'multiple custom actions help' <<'EOF'
|
||||
>>> todo.sh help foo bar
|
||||
foo ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does foo.
|
||||
\
|
||||
bar ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does bar.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_todo_session 'nonexisting action help' <<'EOF'
|
||||
>>> todo.sh help doesnotexist
|
||||
TODO: No action "doesnotexist" exists.
|
||||
=== 1
|
||||
|
||||
>>> todo.sh help foo doesnotexist bar
|
||||
foo ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does foo.
|
||||
\
|
||||
TODO: No action "doesnotexist" exists.
|
||||
=== 1
|
||||
EOF
|
||||
|
||||
test_todo_session 'mixed built-in and custom actions help' <<'EOF'
|
||||
>>> todo.sh help foo shorthelp bar
|
||||
foo ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does foo.
|
||||
\
|
||||
shorthelp
|
||||
List the one-line usage of all built-in and add-on actions.
|
||||
\
|
||||
bar ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does bar.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_todo_session 'custom override of built-in action help' <<'EOF'
|
||||
>>> todo.sh help ls
|
||||
ls ITEM#[, ITEM#, ...] [TERM...]
|
||||
This custom action does ls.
|
||||
\
|
||||
EOF
|
||||
|
||||
test_done
|
||||
54
todo.sh
54
todo.sh
@@ -54,7 +54,7 @@ shorthelp()
|
||||
del|rm ITEM# [TERM]
|
||||
depri|dp ITEM#[, ITEM#, ITEM#, ...]
|
||||
do ITEM#[, ITEM#, ITEM#, ...]
|
||||
help [ACTION...]
|
||||
help
|
||||
list|ls [TERM...]
|
||||
listall|lsa [TERM...]
|
||||
listaddons
|
||||
@@ -154,12 +154,6 @@ help()
|
||||
|
||||
|
||||
EndVerboseHelp
|
||||
actionsHelp
|
||||
addonHelp
|
||||
}
|
||||
|
||||
actionsHelp()
|
||||
{
|
||||
cat <<-EndActionsHelp
|
||||
Built-in Actions:
|
||||
add "THING I NEED TO DO +project @context"
|
||||
@@ -206,9 +200,8 @@ actionsHelp()
|
||||
do ITEM#[, ITEM#, ITEM#, ...]
|
||||
Marks task(s) on line ITEM# as done in todo.txt.
|
||||
|
||||
help [ACTION...]
|
||||
Display help about usage, options, built-in and add-on actions,
|
||||
or just the usage help for the passed ACTION(s).
|
||||
help
|
||||
Display this help message.
|
||||
|
||||
list [TERM...]
|
||||
ls [TERM...]
|
||||
@@ -285,6 +278,9 @@ actionsHelp()
|
||||
List the one-line usage of all built-in and add-on actions.
|
||||
|
||||
EndActionsHelp
|
||||
|
||||
addonHelp
|
||||
exit 1
|
||||
}
|
||||
|
||||
addonHelp()
|
||||
@@ -306,25 +302,6 @@ addonHelp()
|
||||
fi
|
||||
}
|
||||
|
||||
actionUsage()
|
||||
{
|
||||
for actionName
|
||||
do
|
||||
action="${TODO_ACTIONS_DIR}/${actionName}"
|
||||
if [ -f "$action" -a -x "$action" ]; then
|
||||
"$action" usage
|
||||
else
|
||||
builtinActionUsage=$(actionsHelp | sed -n -e "/^ ${actionName//\//\\/} /,/^\$/p" -e "/^ ${actionName//\//\\/}$/,/^\$/p")
|
||||
if [ "$builtinActionUsage" ]; then
|
||||
echo "$builtinActionUsage"
|
||||
echo
|
||||
else
|
||||
die "TODO: No action \"${actionName}\" exists."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
die()
|
||||
{
|
||||
echo "$*"
|
||||
@@ -412,21 +389,22 @@ replaceOrPrepend()
|
||||
else
|
||||
input=$*
|
||||
fi
|
||||
cleaninput "for sed"
|
||||
|
||||
# Retrieve existing priority and prepended date
|
||||
priority=$(sed -e "$item!d" -e $item's/^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\1/' "$TODO_FILE")
|
||||
prepdate=$(sed -e "$item!d" -e $item's/^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\2/' "$TODO_FILE")
|
||||
local -r priAndDateExpr='^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}'
|
||||
priority=$(sed -e "$item!d" -e "${item}s/${priAndDateExpr}.*/\\1/" "$TODO_FILE")
|
||||
prepdate=$(sed -e "$item!d" -e "${item}s/${priAndDateExpr}.*/\\2/" "$TODO_FILE")
|
||||
|
||||
if [ "$prepdate" -a "$action" = "replace" ] && [ "$(echo "$input"|sed -e 's/^\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\}\)\{0,1\}.*/\1/')" ]; then
|
||||
# If the replaced text starts with a date, it will replace the existing
|
||||
# date, too.
|
||||
if [ "$prepdate" -a "$action" = "replace" ] && [ "$(echo "$input"|sed -e "s/${priAndDateExpr}.*/\\1\\2/")" ]; then
|
||||
# If the replaced text starts with a [priority +] date, it will replace
|
||||
# the existing date, too.
|
||||
prepdate=
|
||||
fi
|
||||
|
||||
# Temporarily remove any existing priority and prepended date, perform the
|
||||
# change (replace/prepend) and re-insert the existing priority and prepended
|
||||
# date again.
|
||||
cleaninput "for sed"
|
||||
sed -i.bak -e "$item s/^${priority}${prepdate}//" -e "$item s|^.*|${priority}${prepdate}${input}${backref}|" "$TODO_FILE"
|
||||
if [ $TODOTXT_VERBOSE -gt 0 ]; then
|
||||
getNewtodo "$item"
|
||||
@@ -1098,11 +1076,6 @@ case $action in
|
||||
;;
|
||||
|
||||
"help" )
|
||||
shift ## Was help; new $1 is first help topic / action name
|
||||
if [ $# -gt 0 ]; then
|
||||
# Don't use PAGER here; we don't expect much usage output from one / few actions.
|
||||
actionUsage "$@"
|
||||
else
|
||||
if [ -t 1 ] ; then # STDOUT is a TTY
|
||||
if which "${PAGER:-less}" >/dev/null 2>&1; then
|
||||
# we have a working PAGER (or less as a default)
|
||||
@@ -1110,7 +1083,6 @@ case $action in
|
||||
fi
|
||||
fi
|
||||
help # just in case something failed above, we go ahead and just spew to STDOUT
|
||||
fi
|
||||
;;
|
||||
|
||||
"shorthelp" )
|
||||
|
||||
@@ -28,8 +28,6 @@ _todo()
|
||||
case "$prev" in
|
||||
command)
|
||||
completions=$COMMANDS;;
|
||||
help)
|
||||
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons)";;
|
||||
addto|listfile|lf)
|
||||
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile);;
|
||||
-*) completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS";;
|
||||
|
||||
Reference in New Issue
Block a user