Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Comparing changes

Choose two branches to see what's changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: ginatrapani/todo.txt-cli
base: 7b5c983bb6
...
head fork: ginatrapani/todo.txt-cli
compare: da683366f4
Checking mergeability… Don't worry, you can still create the pull request.
  • 10 commits
  • 9 files changed
  • 0 commit comments
  • 2 contributors
Commits on Apr 27, 2012
@inkarkat inkarkat Tests: Add test for listaddons. fac5533
@inkarkat inkarkat Tests: Add test for ordinary help. 7ab9047
@inkarkat inkarkat ENH: Print usage help for custom action.
Currently, the only way to get usage help for a custom action is to use "todo.sh help" and scroll / search for the action name. (Or try to call the action without / with invalid parameters to hopefully get a one-line syntax summary.)
This extends the help command to print the usage of optionally passed custom action names.
42424d5
@inkarkat inkarkat Refactoring: Extract make_action into actions-test-lib.sh.
This reduces the duplication in the individual test files.
99e5e57
@inkarkat inkarkat ENH: Print usage help for all passed actions.
Extend the support for specific usage help to built-in actions.
97035d3
@inkarkat inkarkat FIX: Always return success after help.
Usually (i.e. when a pager is available), the help() output is piped through the pager, and then the return code will be the one of the pager. So the exit 1 at the end of help() doesn't make much sense, and should be abolished for consistency.
f2b9734
@inkarkat inkarkat Add action argument for help to todo_completion.
Note that this is not perfect, as it only handles completing a single action after "help", but that should over the most important use case.
7acb521
Commits on May 11, 2012
@inkarkat inkarkat FIX: Adapt test for OS X.
POSIX sed doesn't understand the \w atom; use [A-Z] instead; it's also more precise.
c0c93c8
@inkarkat inkarkat FIX: Built-in action help for OS X.
POSIX sed doesn't support regex branches; I don't want to switch to modern regexp (via -E), since that makes more characters special. Rather, expand the alternatives into two sed commands.
e48ad81
Commits on May 12, 2012
@ginatrapani Merge pull request #89 from inkarkat/individual-help-enhancement
Individual help enhancement
da68336
View
18 tests/actions-test-lib.sh
@@ -0,0 +1,18 @@
+#!/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"
+}
View
44 tests/t2100-help.sh
@@ -0,0 +1,44 @@
+#!/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
View
66 tests/t2110-help-action.sh
@@ -0,0 +1,66 @@
+#!/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
View
20 tests/t6100-completion-help.sh
@@ -0,0 +1,20 @@
+#!/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
View
12 tests/t8000-actions.sh
@@ -4,19 +4,9 @@ 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
View
44 tests/t8010-listaddons.sh
@@ -0,0 +1,44 @@
+#!/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
View
76 tests/t8020-actions-help.sh
@@ -0,0 +1,76 @@
+#!/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
View
51 todo.sh
@@ -54,7 +54,7 @@ shorthelp()
del|rm ITEM# [TERM]
depri|dp ITEM#[, ITEM#, ITEM#, ...]
do ITEM#[, ITEM#, ITEM#, ...]
- help
+ help [ACTION...]
list|ls [TERM...]
listall|lsa [TERM...]
listaddons
@@ -154,6 +154,12 @@ help()
EndVerboseHelp
+ actionsHelp
+ addonHelp
+}
+
+actionsHelp()
+{
cat <<-EndActionsHelp
Built-in Actions:
add "THING I NEED TO DO +project @context"
@@ -200,8 +206,9 @@ help()
do ITEM#[, ITEM#, ITEM#, ...]
Marks task(s) on line ITEM# as done in todo.txt.
- help
- Display this help message.
+ help [ACTION...]
+ Display help about usage, options, built-in and add-on actions,
+ or just the usage help for the passed ACTION(s).
list [TERM...]
ls [TERM...]
@@ -280,9 +287,6 @@ help()
List the one-line usage of all built-in and add-on actions.
EndActionsHelp
-
- addonHelp
- exit 1
}
addonHelp()
@@ -304,6 +308,25 @@ 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 "$*"
@@ -1088,13 +1111,19 @@ case $action in
;;
"help" )
- 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)
- help | "${PAGER:-less}" && exit 0
+ 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)
+ help | "${PAGER:-less}" && exit 0
+ fi
fi
+ help # just in case something failed above, we go ahead and just spew to STDOUT
fi
- help # just in case something failed above, we go ahead and just spew to STDOUT
;;
"shorthelp" )
View
2  todo_completion
@@ -29,6 +29,8 @@ _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";;

No commit comments for this range

Something went wrong with that request. Please try again.