Compare commits
10 Commits
archive/bu
...
archive/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cd7d2f2fda | ||
|
|
395465b5f2 | ||
|
|
d2e0f6e38d | ||
|
|
b1d894f65d | ||
|
|
f5270be463 | ||
|
|
8cba7533b9 | ||
|
|
285d5039f2 | ||
|
|
9b67a76833 | ||
|
|
2b0921f4ec | ||
|
|
202f892e85 |
2
Makefile
2
Makefile
@@ -13,7 +13,7 @@ VERSION-FILE: .FORCE-VERSION-FILE
|
|||||||
todo.sh: VERSION-FILE
|
todo.sh: VERSION-FILE
|
||||||
|
|
||||||
# For packaging
|
# For packaging
|
||||||
DISTFILES := todo.cfg
|
DISTFILES := todo.cfg todo_completion
|
||||||
|
|
||||||
DISTNAME=todo.txt_cli-$(VERSION)
|
DISTNAME=todo.txt_cli-$(VERSION)
|
||||||
dist: $(DISTFILES) todo.sh
|
dist: $(DISTFILES) todo.sh
|
||||||
|
|||||||
@@ -39,6 +39,24 @@ GARDEN: 2 added.
|
|||||||
GARDEN: 2 of 2 tasks shown
|
GARDEN: 2 of 2 tasks shown
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
#
|
||||||
|
# List available files
|
||||||
|
#
|
||||||
|
test_todo_session 'list available files' <<EOF
|
||||||
|
>>> todo.sh listfile
|
||||||
|
Files in the todo.txt directory:
|
||||||
|
done.txt
|
||||||
|
garden.txt
|
||||||
|
report.txt
|
||||||
|
todo.txt
|
||||||
|
|
||||||
|
>>> TODOTXT_VERBOSE=0 todo.sh listfile
|
||||||
|
done.txt
|
||||||
|
garden.txt
|
||||||
|
report.txt
|
||||||
|
todo.txt
|
||||||
|
EOF
|
||||||
|
|
||||||
#
|
#
|
||||||
# Filter
|
# Filter
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -73,29 +73,6 @@ TODO: 1 of 3 tasks shown
|
|||||||
TODO: 1 of 3 tasks shown
|
TODO: 1 of 3 tasks shown
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
#
|
|
||||||
# check negative filtering via -TERM
|
|
||||||
#
|
|
||||||
test_todo_session 'checking negative filtering via -TERM' <<EOF
|
|
||||||
>>> todo.sh ls -second
|
|
||||||
2 aaa zzz this line should be first.
|
|
||||||
1 ccc xxx this line should be third.
|
|
||||||
--
|
|
||||||
TODO: 2 of 3 tasks shown
|
|
||||||
|
|
||||||
>>> todo.sh ls "-should be f"
|
|
||||||
3 bbb yyy this line should be second.
|
|
||||||
1 ccc xxx this line should be third.
|
|
||||||
--
|
|
||||||
TODO: 2 of 3 tasks shown
|
|
||||||
|
|
||||||
>>> todo.sh ls "- zzz"
|
|
||||||
3 bbb yyy this line should be second.
|
|
||||||
1 ccc xxx this line should be third.
|
|
||||||
--
|
|
||||||
TODO: 2 of 3 tasks shown
|
|
||||||
EOF
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# check the filtering of TERM with regexp
|
# check the filtering of TERM with regexp
|
||||||
#
|
#
|
||||||
|
|||||||
21
todo.sh
21
todo.sh
@@ -57,7 +57,7 @@ shorthelp()
|
|||||||
list|ls [TERM...]
|
list|ls [TERM...]
|
||||||
listall|lsa [TERM...]
|
listall|lsa [TERM...]
|
||||||
listcon|lsc
|
listcon|lsc
|
||||||
listfile|lf SRC [TERM...]
|
listfile|lf [SRC [TERM...]]
|
||||||
listpri|lsp [PRIORITY] [TERM...]
|
listpri|lsp [PRIORITY] [TERM...]
|
||||||
listproj|lsprj [TERM...]
|
listproj|lsprj [TERM...]
|
||||||
move|mv ITEM# DEST [SRC]
|
move|mv ITEM# DEST [SRC]
|
||||||
@@ -211,11 +211,13 @@ help()
|
|||||||
lsc
|
lsc
|
||||||
Lists all the task contexts that start with the @ sign in todo.txt.
|
Lists all the task contexts that start with the @ sign in todo.txt.
|
||||||
|
|
||||||
listfile SRC [TERM...]
|
listfile [SRC [TERM...]]
|
||||||
lf SRC [TERM...]
|
lf [SRC [TERM...]]
|
||||||
Displays all the lines in SRC file located in the todo.txt directory,
|
Displays all the lines in SRC file located in the todo.txt directory,
|
||||||
sorted by priority with line numbers. If TERM specified, lists
|
sorted by priority with line numbers. If TERM specified, lists
|
||||||
all lines that contain TERM in SRC file.
|
all lines that contain TERM in SRC file.
|
||||||
|
Without any arguments, the names of all text files in the todo.txt
|
||||||
|
directory are listed.
|
||||||
|
|
||||||
listpri [PRIORITY] [TERM...]
|
listpri [PRIORITY] [TERM...]
|
||||||
lsp [PRIORITY] [TERM...]
|
lsp [PRIORITY] [TERM...]
|
||||||
@@ -688,7 +690,7 @@ filtercommand()
|
|||||||
## $search_term
|
## $search_term
|
||||||
#
|
#
|
||||||
## Remove the first character (-) before adding to our filter command
|
## Remove the first character (-) before adding to our filter command
|
||||||
filter="${filter:-}${filter:+ | }grep -v -i $(shellquote "${search_term:1}")"
|
filter="${filter:-}${filter:+ | }grep -v -i '$(shellquote "${search_term:1}")'"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -1049,10 +1051,15 @@ case $action in
|
|||||||
|
|
||||||
"listfile" | "lf" )
|
"listfile" | "lf" )
|
||||||
shift ## Was listfile, next $1 is file name
|
shift ## Was listfile, next $1 is file name
|
||||||
FILE="$1"
|
if [ $# -eq 0 ]; then
|
||||||
shift ## Was filename; next $1 is first search term
|
[ $TODOTXT_VERBOSE -gt 0 ] && echo "Files in the todo.txt directory:"
|
||||||
|
cd "$TODO_DIR" && ls -1 *.txt
|
||||||
|
else
|
||||||
|
FILE="$1"
|
||||||
|
shift ## Was filename; next $1 is first search term
|
||||||
|
|
||||||
_list "$FILE" "$@"
|
_list "$FILE" "$@"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"listcon" | "lsc" )
|
"listcon" | "lsc" )
|
||||||
|
|||||||
71
todo_completion
Normal file
71
todo_completion
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/bin/bash source-this-script
|
||||||
|
[ "$BASH_VERSION" ] || return
|
||||||
|
|
||||||
|
_todo()
|
||||||
|
{
|
||||||
|
local cur prev opts
|
||||||
|
COMPREPLY=()
|
||||||
|
cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
|
||||||
|
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 listall lsa listcon \
|
||||||
|
lsc listfile lf listpri lsp listproj lsprj move \
|
||||||
|
mv prepend prep pri p replace report shorthelp"
|
||||||
|
|
||||||
|
# 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 completions
|
||||||
|
if [ $COMP_CWORD -eq 1 ]; then
|
||||||
|
completions="$allCommands $OPTS"
|
||||||
|
elif [[ $COMP_CWORD -gt 2 && ( \
|
||||||
|
"${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=$(TODOTXT_VERBOSE=0 todo.sh command listfile)
|
||||||
|
else
|
||||||
|
case "$prev" in
|
||||||
|
command)
|
||||||
|
completions=$COMMANDS;;
|
||||||
|
addto|listfile|lf)
|
||||||
|
completions=$(TODOTXT_VERBOSE=0 todo.sh command listfile);;
|
||||||
|
-*) completions="$allCommands $OPTS";;
|
||||||
|
*) case "$cur" in
|
||||||
|
+*) completions=$(TODOTXT_VERBOSE=0 todo.sh command listproj);;
|
||||||
|
@*) completions=$(TODOTXT_VERBOSE=0 todo.sh command listcon);;
|
||||||
|
*) if [[ "$cur" =~ ^[0-9]+$ ]]; then
|
||||||
|
local item=$(TODOTXT_VERBOSE=0 todo.sh -@ -+ -p -x command ls "^ *${cur} " | head -n 1)
|
||||||
|
|
||||||
|
# Remove the (padded) task number; we prepend the
|
||||||
|
# user-provided $cur.
|
||||||
|
item=${item#* }
|
||||||
|
|
||||||
|
# Remove the timestamp prepended by the -t option;
|
||||||
|
# there's no todo.txt option for that yet.
|
||||||
|
item=${item#[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] }
|
||||||
|
|
||||||
|
# Append task text as a shell comment. This
|
||||||
|
# completion can be a safety check before a
|
||||||
|
# destructive todo.txt operation.
|
||||||
|
[ "$item" ] && COMPREPLY[0]="$cur # $item"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
COMPREPLY=( $( compgen -W "$completions" -- $cur ))
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
complete -F _todo todo.sh
|
||||||
|
# If you define an alias (e.g. "t") to todo.sh, you need to explicitly enable
|
||||||
|
# completion for it, too:
|
||||||
|
#complete -F _todo t
|
||||||
Reference in New Issue
Block a user