Compare commits
13 Commits
archive/ls
...
archive/bu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea0e7c7b25 | ||
|
|
417e86ae7a | ||
|
|
cb982391de | ||
|
|
b8244792cc | ||
|
|
a433c5828e | ||
|
|
7742d3c115 | ||
|
|
7ca2b4c687 | ||
|
|
239f7234ab | ||
|
|
e3fce6f12b | ||
|
|
65d39319f1 | ||
|
|
62d3ff2977 | ||
|
|
227b9d2c0a | ||
|
|
99fa15da36 |
@@ -73,6 +73,29 @@ TODO: 1 of 3 tasks shown
|
||||
TODO: 1 of 3 tasks shown
|
||||
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
|
||||
#
|
||||
@@ -176,7 +199,7 @@ cat > todo.txt <<EOF
|
||||
(D) @con02 +prj03 -- Some project 03 task, pri D
|
||||
(D) @con02 +prj04 -- Some project 04 task, pri D
|
||||
@con01 +prj01 -- Some project 01 task, no priority
|
||||
@con01 +prj02 -- Some project 02 task, no priority
|
||||
@con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
@con02 +prj03 -- Some project 03 task, no priorty
|
||||
@con02 +prj04 -- Some project 04 task, no priority
|
||||
EOF
|
||||
@@ -199,7 +222,7 @@ test_todo_session 'plain mode option' <<EOF
|
||||
[1;37m15 (D) @con02 +prj03 -- Some project 03 task, pri D[0m
|
||||
[1;37m16 (D) @con02 +prj04 -- Some project 04 task, pri D[0m
|
||||
17 @con01 +prj01 -- Some project 01 task, no priority
|
||||
18 @con01 +prj02 -- Some project 02 task, no priority
|
||||
18 @con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
19 @con02 +prj03 -- Some project 03 task, no priorty
|
||||
20 @con02 +prj04 -- Some project 04 task, no priority
|
||||
--
|
||||
@@ -223,7 +246,7 @@ TODO: 20 of 20 tasks shown
|
||||
15 (D) @con02 +prj03 -- Some project 03 task, pri D
|
||||
16 (D) @con02 +prj04 -- Some project 04 task, pri D
|
||||
17 @con01 +prj01 -- Some project 01 task, no priority
|
||||
18 @con01 +prj02 -- Some project 02 task, no priority
|
||||
18 @con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
19 @con02 +prj03 -- Some project 03 task, no priorty
|
||||
20 @con02 +prj04 -- Some project 04 task, no priority
|
||||
--
|
||||
@@ -251,7 +274,7 @@ cat > todo.txt <<EOF
|
||||
(D) @con02 +prj03 -- Some project 03 task, pri D
|
||||
(D) @con02 +prj04 -- Some project 04 task, pri D
|
||||
@con01 +prj01 -- Some project 01 task, no priority
|
||||
@con01 +prj02 -- Some project 02 task, no priority
|
||||
@con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
@con02 +prj03 -- Some project 03 task, no priorty
|
||||
@con02 +prj04 -- Some project 04 task, no priority
|
||||
EOF
|
||||
@@ -274,7 +297,7 @@ test_todo_session 'context, project, and priority suppression' <<EOF
|
||||
[1;37m15 (D) @con02 +prj03 -- Some project 03 task, pri D[0m
|
||||
[1;37m16 (D) @con02 +prj04 -- Some project 04 task, pri D[0m
|
||||
17 @con01 +prj01 -- Some project 01 task, no priority
|
||||
18 @con01 +prj02 -- Some project 02 task, no priority
|
||||
18 @con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
19 @con02 +prj03 -- Some project 03 task, no priorty
|
||||
20 @con02 +prj04 -- Some project 04 task, no priority
|
||||
--
|
||||
@@ -290,7 +313,7 @@ TODO: 20 of 20 tasks shown
|
||||
[1;37m13 (D) @con01 +prj01 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 (D) @con01 +prj02 -- Some project 02 task, pri D[0m
|
||||
17 @con01 +prj01 -- Some project 01 task, no priority
|
||||
18 @con01 +prj02 -- Some project 02 task, no priority
|
||||
18 @con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
|
||||
@@ -304,7 +327,7 @@ TODO: 10 of 20 tasks shown
|
||||
[1;37m13 @con01 +prj01 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 @con01 +prj02 -- Some project 02 task, pri D[0m
|
||||
17 @con01 +prj01 -- Some project 01 task, no priority
|
||||
18 @con01 +prj02 -- Some project 02 task, no priority
|
||||
18 @con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
|
||||
@@ -318,7 +341,7 @@ TODO: 10 of 20 tasks shown
|
||||
[1;37m13 (D) @con01 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 (D) @con01 -- Some project 02 task, pri D[0m
|
||||
17 @con01 -- Some project 01 task, no priority
|
||||
18 @con01 -- Some project 02 task, no priority
|
||||
18 @con01 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
|
||||
@@ -332,7 +355,7 @@ TODO: 10 of 20 tasks shown
|
||||
[1;37m13 (D) +prj01 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 (D) +prj02 -- Some project 02 task, pri D[0m
|
||||
17 +prj01 -- Some project 01 task, no priority
|
||||
18 +prj02 -- Some project 02 task, no priority
|
||||
18 +prj02 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
|
||||
@@ -346,7 +369,7 @@ TODO: 10 of 20 tasks shown
|
||||
[1;37m13 +prj01 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 +prj02 -- Some project 02 task, pri D[0m
|
||||
17 +prj01 -- Some project 01 task, no priority
|
||||
18 +prj02 -- Some project 02 task, no priority
|
||||
18 +prj02 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
|
||||
@@ -360,7 +383,7 @@ TODO: 10 of 20 tasks shown
|
||||
[1;37m13 (D) @con01 +prj01 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 (D) @con01 +prj02 -- Some project 02 task, pri D[0m
|
||||
17 @con01 +prj01 -- Some project 01 task, no priority
|
||||
18 @con01 +prj02 -- Some project 02 task, no priority
|
||||
18 @con01 +prj02 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
|
||||
@@ -374,7 +397,7 @@ TODO: 10 of 20 tasks shown
|
||||
[1;37m13 -- Some project 01 task, pri D[0m
|
||||
[1;37m14 -- Some project 02 task, pri D[0m
|
||||
17 -- Some project 01 task, no priority
|
||||
18 -- Some project 02 task, no priority
|
||||
18 -- Some project(S) 02 task, no priority
|
||||
--
|
||||
TODO: 10 of 20 tasks shown
|
||||
EOF
|
||||
|
||||
@@ -166,4 +166,20 @@ test_todo_session 'highlighting with hidden contexts/projects' <<EOF
|
||||
TODO: 4 of 4 tasks shown
|
||||
EOF
|
||||
|
||||
# check that priorities are only matched at the start of the task
|
||||
#
|
||||
cat > todo.txt <<EOF
|
||||
(D) some prioritized task
|
||||
not prioritized
|
||||
should not be seen as PRIORITIZE(D) task
|
||||
EOF
|
||||
test_todo_session 'highlighting priority position' <<EOF
|
||||
>>> todo.sh ls
|
||||
[1;37m1 (D) some prioritized task[0m
|
||||
2 not prioritized
|
||||
3 should not be seen as PRIORITIZE(D) task
|
||||
--
|
||||
TODO: 3 of 3 tasks shown
|
||||
EOF
|
||||
|
||||
test_done
|
||||
|
||||
195
todo.sh
195
todo.sh
@@ -44,14 +44,14 @@ shorthelp()
|
||||
|
||||
Actions:
|
||||
add|a "THING I NEED TO DO +project @context"
|
||||
addto DEST "TEXT TO ADD"
|
||||
addm "THINGS I NEED TO DO
|
||||
MORE THINGS I NEED TO DO"
|
||||
addto DEST "TEXT TO ADD"
|
||||
append|app ITEM# "TEXT TO APPEND"
|
||||
archive
|
||||
command [ACTIONS]
|
||||
del|rm ITEM# [TERM]
|
||||
dp|depri ITEM#[, ITEM#, ITEM#, ...]
|
||||
depri|dp ITEM#[, ITEM#, ITEM#, ...]
|
||||
do ITEM#[, ITEM#, ITEM#, ...]
|
||||
help
|
||||
list|ls [TERM...]
|
||||
@@ -65,18 +65,92 @@ shorthelp()
|
||||
pri|p ITEM# PRIORITY
|
||||
replace ITEM# "UPDATED TODO"
|
||||
report
|
||||
shorthelp
|
||||
|
||||
EndHelp
|
||||
|
||||
# Only list the one-line usage from the add-on actions. This assumes that
|
||||
# add-ons use the same usage indentation structure as todo.sh.
|
||||
addonHelp | grep -e '^ Add-on Actions:' -e '^ [[:alpha:]]'
|
||||
|
||||
cat <<-EndHelpFooter
|
||||
|
||||
See "help" for more details.
|
||||
EndHelp
|
||||
EndHelpFooter
|
||||
exit 0
|
||||
}
|
||||
|
||||
help()
|
||||
{
|
||||
cat <<-EndHelp
|
||||
cat <<-EndOptionsHelp
|
||||
Usage: $oneline_usage
|
||||
|
||||
Actions:
|
||||
Options:
|
||||
-@
|
||||
Hide context names in list output. Use twice to show context
|
||||
names (default).
|
||||
-+
|
||||
Hide project names in list output. Use twice to show project
|
||||
names (default).
|
||||
-c
|
||||
Color mode
|
||||
-d CONFIG_FILE
|
||||
Use a configuration file other than the default ~/.todo/config
|
||||
-f
|
||||
Forces actions without confirmation or interactive input
|
||||
-h
|
||||
Display a short help message; same as action "shorthelp"
|
||||
-p
|
||||
Plain mode turns off colors
|
||||
-P
|
||||
Hide priority labels in list output. Use twice to show
|
||||
priority labels (default).
|
||||
-a
|
||||
Don't auto-archive tasks automatically on completion
|
||||
-A
|
||||
Auto-archive tasks automatically on completion
|
||||
-n
|
||||
Don't preserve line numbers; automatically remove blank lines
|
||||
on task deletion
|
||||
-N
|
||||
Preserve line numbers
|
||||
-t
|
||||
Prepend the current date to a task automatically
|
||||
when it's added.
|
||||
-T
|
||||
Do not prepend the current date to a task automatically
|
||||
when it's added.
|
||||
-v
|
||||
Verbose mode turns on confirmation messages
|
||||
-vv
|
||||
Extra verbose mode prints some debugging information and
|
||||
additional help text
|
||||
-V
|
||||
Displays version, license and credits
|
||||
-x
|
||||
Disables TODOTXT_FINAL_FILTER
|
||||
|
||||
|
||||
EndOptionsHelp
|
||||
|
||||
[ $TODOTXT_VERBOSE -gt 1 ] && cat <<-EndVerboseHelp
|
||||
Environment variables:
|
||||
TODOTXT_AUTO_ARCHIVE is same as option -a (0)/-A (1)
|
||||
TODOTXT_CFG_FILE=CONFIG_FILE is same as option -d CONFIG_FILE
|
||||
TODOTXT_FORCE=1 is same as option -f
|
||||
TODOTXT_PRESERVE_LINE_NUMBERS is same as option -n (0)/-N (1)
|
||||
TODOTXT_PLAIN is same as option -p (1)/-c (0)
|
||||
TODOTXT_DATE_ON_ADD is same as option -t (1)/-T (0)
|
||||
TODOTXT_VERBOSE=1 is same as option -v
|
||||
TODOTXT_DISABLE_FILTER=1 is same as option -x
|
||||
TODOTXT_DEFAULT_ACTION="" run this when called with no arguments
|
||||
TODOTXT_SORT_COMMAND="sort ..." customize list output
|
||||
TODOTXT_FINAL_FILTER="sed ..." customize list after color, P@+ hiding
|
||||
|
||||
|
||||
EndVerboseHelp
|
||||
cat <<-EndActionsHelp
|
||||
Built-in Actions:
|
||||
add "THING I NEED TO DO +project @context"
|
||||
a "THING I NEED TO DO +project @context"
|
||||
Adds THING I NEED TO DO to your todo.txt file on its own line.
|
||||
@@ -177,81 +251,33 @@ help()
|
||||
report
|
||||
Adds the number of open tasks and done tasks to report.txt.
|
||||
|
||||
shorthelp
|
||||
List the one-line usage of all built-in and add-on actions.
|
||||
|
||||
|
||||
Options:
|
||||
-@
|
||||
Hide context names in list output. Use twice to show context
|
||||
names (default).
|
||||
-+
|
||||
Hide project names in list output. Use twice to show project
|
||||
names (default).
|
||||
-c
|
||||
Color mode
|
||||
-d CONFIG_FILE
|
||||
Use a configuration file other than the default ~/.todo/config
|
||||
-f
|
||||
Forces actions without confirmation or interactive input
|
||||
-h
|
||||
Display a short help message
|
||||
-p
|
||||
Plain mode turns off colors
|
||||
-P
|
||||
Hide priority labels in list output. Use twice to show
|
||||
priority labels (default).
|
||||
-a
|
||||
Don't auto-archive tasks automatically on completion
|
||||
-A
|
||||
Auto-archive tasks automatically on completion
|
||||
-n
|
||||
Don't preserve line numbers; automatically remove blank lines
|
||||
on task deletion
|
||||
-N
|
||||
Preserve line numbers
|
||||
-t
|
||||
Prepend the current date to a task automatically
|
||||
when it's added.
|
||||
-T
|
||||
Do not prepend the current date to a task automatically
|
||||
when it's added.
|
||||
-v
|
||||
Verbose mode turns on confirmation messages
|
||||
-vv
|
||||
Extra verbose mode prints some debugging information
|
||||
-V
|
||||
Displays version, license and credits
|
||||
-x
|
||||
Disables TODOTXT_FINAL_FILTER
|
||||
EndActionsHelp
|
||||
|
||||
addonHelp
|
||||
exit 1
|
||||
}
|
||||
|
||||
Environment variables:
|
||||
TODOTXT_AUTO_ARCHIVE is same as option -a (0)/-A (1)
|
||||
TODOTXT_CFG_FILE=CONFIG_FILE is same as option -d CONFIG_FILE
|
||||
TODOTXT_FORCE=1 is same as option -f
|
||||
TODOTXT_PRESERVE_LINE_NUMBERS is same as option -n (0)/-N (1)
|
||||
TODOTXT_PLAIN is same as option -p (1)/-c (0)
|
||||
TODOTXT_DATE_ON_ADD is same as option -t (1)/-T (0)
|
||||
TODOTXT_VERBOSE=1 is same as option -v
|
||||
TODOTXT_DEFAULT_ACTION="" run this when called with no arguments
|
||||
TODOTXT_SORT_COMMAND="sort ..." customize list output
|
||||
TODOTXT_FINAL_FILTER="sed ..." customize list after color, P@+ hiding
|
||||
EndHelp
|
||||
|
||||
if [ -d "$TODO_ACTIONS_DIR" ]
|
||||
then
|
||||
echo ""
|
||||
addonHelp()
|
||||
{
|
||||
if [ -d "$TODO_ACTIONS_DIR" ]; then
|
||||
didPrintAddonActionsHeader=
|
||||
for action in "$TODO_ACTIONS_DIR"/*
|
||||
do
|
||||
if [ -f "$action" -a -x "$action" ]
|
||||
then
|
||||
if [ -f "$action" -a -x "$action" ]; then
|
||||
if [ ! "$didPrintAddonActionsHeader" ]; then
|
||||
cat <<-EndAddonActionsHeader
|
||||
Add-on Actions:
|
||||
EndAddonActionsHeader
|
||||
didPrintAddonActionsHeader=1
|
||||
fi
|
||||
"$action" usage
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
fi
|
||||
|
||||
|
||||
exit 1
|
||||
}
|
||||
|
||||
die()
|
||||
@@ -418,7 +444,10 @@ do
|
||||
OVR_TODOTXT_FORCE=1
|
||||
;;
|
||||
h )
|
||||
shorthelp
|
||||
# Short-circuit option parsing and forward to the action.
|
||||
# Cannot just invoke shorthelp() because we need the configuration
|
||||
# processed to locate the add-on actions directory.
|
||||
set -- '-h' 'shorthelp'
|
||||
;;
|
||||
n )
|
||||
OVR_TODOTXT_PRESERVE_LINE_NUMBERS=0
|
||||
@@ -474,6 +503,7 @@ TODOTXT_AUTO_ARCHIVE=${TODOTXT_AUTO_ARCHIVE:-1}
|
||||
TODOTXT_DATE_ON_ADD=${TODOTXT_DATE_ON_ADD:-0}
|
||||
TODOTXT_DEFAULT_ACTION=${TODOTXT_DEFAULT_ACTION:-}
|
||||
TODOTXT_SORT_COMMAND=${TODOTXT_SORT_COMMAND:-env LC_COLLATE=C sort -f -k2}
|
||||
TODOTXT_DISABLE_FILTER=${TODOTXT_DISABLE_FILTER:-}
|
||||
TODOTXT_FINAL_FILTER=${TODOTXT_FINAL_FILTER:-cat}
|
||||
|
||||
# Export all TODOTXT_* variables
|
||||
@@ -658,7 +688,7 @@ filtercommand()
|
||||
## $search_term
|
||||
#
|
||||
## 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
|
||||
done
|
||||
|
||||
@@ -732,17 +762,18 @@ _list() {
|
||||
return color
|
||||
}
|
||||
{
|
||||
pos = match($0, /\([A-Z]\)/)
|
||||
if (match($0, /^[0-9]+ x /)) {
|
||||
print highlight("COLOR_DONE") $0 highlight("DEFAULT")
|
||||
} else if (pos > 0) {
|
||||
clr = highlight("PRI_" substr($0, pos+1, 1))
|
||||
print ( clr ? clr : highlight("PRI_X") ) $0 highlight("DEFAULT")
|
||||
} else if (match($0, /^[0-9]+ \([A-Z]\)[[:space:]]/)) {
|
||||
clr = highlight("PRI_" substr($0, RSTART + RLENGTH - 3, 1))
|
||||
print \
|
||||
(clr ? clr : highlight("PRI_X")) \
|
||||
(ENVIRON["HIDE_PRIORITY_SUBSTITUTION"] == "" ? $0 : substr($0, 1, RLENGTH - 4) substr($0, RSTART + RLENGTH)) \
|
||||
highlight("DEFAULT")
|
||||
} else { print }
|
||||
}
|
||||
''' \
|
||||
| sed '''
|
||||
s/'${HIDE_PRIORITY_SUBSTITUTION:-^}'//g
|
||||
s/'${HIDE_PROJECTS_SUBSTITUTION:-^}'//g
|
||||
s/'${HIDE_CONTEXTS_SUBSTITUTION:-^}'//g
|
||||
''' \
|
||||
@@ -994,6 +1025,16 @@ case $action in
|
||||
help # just in case something failed above, we go ahead and just spew to STDOUT
|
||||
;;
|
||||
|
||||
"shorthelp" )
|
||||
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)
|
||||
shorthelp | "${PAGER:-less}" && exit 0
|
||||
fi
|
||||
fi
|
||||
shorthelp # just in case something failed above, we go ahead and just spew to STDOUT
|
||||
;;
|
||||
|
||||
"list" | "ls" )
|
||||
shift ## Was ls; new $1 is first search term
|
||||
_list "$TODO_FILE" "$@"
|
||||
|
||||
Reference in New Issue
Block a user