Compare commits
8 Commits
archive/co
...
archive/co
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4145348d0 | ||
|
|
c9a158338b | ||
|
|
6132bdeb47 | ||
|
|
213f6afa38 | ||
|
|
7db3a2de13 | ||
|
|
4f504b26c9 | ||
|
|
6c950429f6 | ||
|
|
9fb52d04e6 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,6 +1,3 @@
|
||||
VERSION-FILE
|
||||
tests/test-results
|
||||
tests/trash\ directory.*
|
||||
done.txt
|
||||
report.txt
|
||||
todo.txt
|
||||
|
||||
@@ -7,7 +7,7 @@ This test checks basic todo_completion of actions and options
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
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 ACTIONS='add a addto addm append app archive command del rm depri dp do help list ls listall lsa listcon lsc listfile lf listpri lsp listproj lsprj move mv prepend prep pri p replace report shorthelp'
|
||||
readonly OPTIONS='-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x'
|
||||
|
||||
test_todo_completion 'all arguments' 'todo.sh ' "$ACTIONS $OPTIONS"
|
||||
|
||||
@@ -7,68 +7,20 @@ This test checks todo_completion of custom actions in .todo.actions.d
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
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 ACTIONS='add a addto addm append app archive command del rm depri dp do help list ls listall lsa listcon lsc listfile lf listpri lsp listproj lsprj move mv prepend prep pri p replace report shorthelp'
|
||||
readonly OPTIONS='-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x'
|
||||
|
||||
readonly ADDONS='bar baz foobar'
|
||||
makeCustomActions()
|
||||
{
|
||||
set -e
|
||||
mkdir "${1:?}"
|
||||
mkdir "$HOME/.todo.actions.d"
|
||||
for addon in $ADDONS
|
||||
do
|
||||
addonFile="${1}/$addon"
|
||||
> "$addonFile"
|
||||
chmod +x "$addonFile"
|
||||
> "$HOME/.todo.actions.d/$addon"
|
||||
chmod +x "$HOME/.todo.actions.d/$addon"
|
||||
done
|
||||
|
||||
# Also create a subdirectory, to test that it is skipped.
|
||||
mkdir "${1}/subdir"
|
||||
|
||||
# Also create a non-executable file, to test that it is skipped.
|
||||
datafile="${1:?}/datafile"
|
||||
> "$datafile"
|
||||
chmod -x "$datafile"
|
||||
[ -x "$datafile" ] && rm "$datafile" # Some file systems may always make files executable; then, skip this check.
|
||||
|
||||
set +e
|
||||
}
|
||||
removeCustomActions()
|
||||
{
|
||||
set -e
|
||||
rmdir "${1}/subdir"
|
||||
rm "${1:?}/"*
|
||||
rmdir "$1"
|
||||
set +e
|
||||
}
|
||||
|
||||
#
|
||||
# Test resolution of the default TODO_ACTIONS_DIR.
|
||||
#
|
||||
makeCustomActions "$HOME/.todo.actions.d"
|
||||
test_todo_completion 'all arguments' 'todo.sh ' "$ACTIONS $ADDONS $OPTIONS"
|
||||
test_todo_completion 'all arguments after option' 'todo.sh -a ' "$ACTIONS $ADDONS $OPTIONS"
|
||||
test_todo_completion 'all arguments beginning with b' 'todo.sh b' 'bar baz'
|
||||
test_todo_completion 'all arguments beginning with f after options' 'todo.sh -a -v f' 'foobar'
|
||||
test_todo_completion 'nothing after addon action' 'todo.sh foobar ' ''
|
||||
removeCustomActions "$HOME/.todo.actions.d"
|
||||
|
||||
#
|
||||
# Test resolution of an alternative TODO_ACTIONS_DIR.
|
||||
#
|
||||
mkdir "$HOME/.todo"
|
||||
makeCustomActions "$HOME/.todo/actions"
|
||||
test_todo_completion 'all arguments with actions from .todo/actions/' 'todo.sh ' "$ACTIONS $ADDONS $OPTIONS"
|
||||
removeCustomActions "$HOME/.todo/actions"
|
||||
|
||||
#
|
||||
# Test resolution of a configured TODO_ACTIONS_DIR.
|
||||
#
|
||||
makeCustomActions "$HOME/addons"
|
||||
cat >> todo.cfg <<'EOF'
|
||||
export TODO_ACTIONS_DIR="$HOME/addons"
|
||||
EOF
|
||||
test_todo_completion 'all arguments with actions from addons/' 'todo.sh ' "$ACTIONS $ADDONS $OPTIONS"
|
||||
removeCustomActions "$HOME/addons"
|
||||
|
||||
test_done
|
||||
|
||||
16
todo.sh
16
todo.sh
@@ -57,7 +57,6 @@ shorthelp()
|
||||
help
|
||||
list|ls [TERM...]
|
||||
listall|lsa [TERM...]
|
||||
listaddons
|
||||
listcon|lsc
|
||||
listfile|lf [SRC [TERM...]]
|
||||
listpri|lsp [PRIORITIES] [TERM...]
|
||||
@@ -220,9 +219,6 @@ help()
|
||||
TERM specified, lists entire todo.txt AND done.txt
|
||||
concatenated and sorted.
|
||||
|
||||
listaddons
|
||||
Lists all added and overridden actions in the actions directory.
|
||||
|
||||
listcon
|
||||
lsc
|
||||
Lists all the task contexts that start with the @ sign in todo.txt.
|
||||
@@ -1304,18 +1300,6 @@ note: PRIORITY must be anywhere from A to Z."
|
||||
fi
|
||||
;;
|
||||
|
||||
"listaddons" )
|
||||
if [ -d "$TODO_ACTIONS_DIR" ]; then
|
||||
cd "$TODO_ACTIONS_DIR" || exit $?
|
||||
for action in *
|
||||
do
|
||||
if [ -f "$action" -a -x "$action" ]; then
|
||||
echo "$action"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
;;
|
||||
|
||||
* )
|
||||
usage;;
|
||||
esac
|
||||
|
||||
@@ -11,18 +11,21 @@ _todo()
|
||||
local -r OPTS="-@ -@@ -+ -++ -d -f -h -p -P -PP -a -n -t -v -vv -V -x"
|
||||
local -r COMMANDS="\
|
||||
add a addto addm append app archive command del \
|
||||
rm depri dp do help list ls listaddons listall lsa listcon \
|
||||
rm depri dp do help list ls listall lsa listcon \
|
||||
lsc listfile lf listpri lsp listproj lsprj move \
|
||||
mv prepend prep pri p replace report shorthelp"
|
||||
local -r MOVE_COMMAND_PATTERN='^(move|mv)$'
|
||||
|
||||
# Add custom commands from add-ons, if installed.
|
||||
# TODO: Filter for executable flag of files found in $TODO_ACTIONS_DIR.
|
||||
local allCommands="$COMMANDS $('ls' "${TODO_ACTIONS_DIR:-$HOME/.todo.actions.d}/" 2>/dev/null)"
|
||||
|
||||
local _todo_sh=${_todo_sh:-todo.sh}
|
||||
local completions
|
||||
if [ $COMP_CWORD -eq 1 ]; then
|
||||
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS"
|
||||
completions="$allCommands $OPTS"
|
||||
elif [[ $COMP_CWORD -gt 2 && ( \
|
||||
"${COMP_WORDS[COMP_CWORD-2]}" =~ $MOVE_COMMAND_PATTERN || \
|
||||
"${COMP_WORDS[COMP_CWORD-3]}" =~ $MOVE_COMMAND_PATTERN ) ]]; then
|
||||
"${COMP_WORDS[COMP_CWORD-2]}" =~ ^(move|mv)$ || \
|
||||
"${COMP_WORDS[COMP_CWORD-3]}" =~ ^(move|mv)$ ) ]]; then
|
||||
# "move ITEM# DEST [SRC]" has file arguments on positions 2 and 3.
|
||||
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile)
|
||||
else
|
||||
@@ -31,7 +34,7 @@ _todo()
|
||||
completions=$COMMANDS;;
|
||||
addto|listfile|lf)
|
||||
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile);;
|
||||
-*) completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS";;
|
||||
-*) completions="$allCommands $OPTS";;
|
||||
*) case "$cur" in
|
||||
+*) completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listproj)
|
||||
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||
@@ -59,7 +62,7 @@ _todo()
|
||||
# a safety check of the ls action output.
|
||||
local todo=$( \
|
||||
eval TODOTXT_VERBOSE=0 $_todo_sh '-@ -+ -p -x command ls "^ *${cur} "' | \
|
||||
sed -e 's/^ *[0-9]\{1,\} //' -e 's/\((.) \)[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
|
||||
sed -e 's/^ *[0-9]\+ //' -e 's/\((.) \)[0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} /\1/' \
|
||||
-e 's/\([xX] \)\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{1,2\}/\1/' \
|
||||
-e 's/[[:space:]]*$//' \
|
||||
-e '1q' \
|
||||
|
||||
Reference in New Issue
Block a user