Compare commits
3 Commits
archive/tr
...
archive/ls
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0f39480bf | ||
|
|
d804a78fa1 | ||
|
|
84880ba525 |
42
tests/t1260-listprj.sh
Executable file
42
tests/t1260-listprj.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='list project functionality
|
||||
'
|
||||
. ./test-lib.sh
|
||||
|
||||
cat > todo.txt <<EOF
|
||||
(B) smell the uppercase Roses +roses @outside +shared
|
||||
(C) notice the sunflowers +sunflowers @garden +shared +landscape
|
||||
stop
|
||||
EOF
|
||||
test_todo_session 'basic listproj' <<EOF
|
||||
>>> todo.sh listproj
|
||||
+landscape
|
||||
+roses
|
||||
+shared
|
||||
+sunflowers
|
||||
EOF
|
||||
|
||||
test_todo_session 'listproj with context' <<EOF
|
||||
>>> todo.sh listproj @garden
|
||||
+landscape
|
||||
+shared
|
||||
+sunflowers
|
||||
EOF
|
||||
|
||||
TEST_TODO_CUSTOM=todo-custom.cfg
|
||||
cat todo.cfg > "$TEST_TODO_CUSTOM"
|
||||
cat >> "$TEST_TODO_CUSTOM" <<'EOF'
|
||||
export DEFAULT='</color>'
|
||||
export PRI_B='<color type=green>'
|
||||
export PRI_C='<color type=blue>'
|
||||
export TODOTXT_FINAL_FILTER='grep -i roses'
|
||||
EOF
|
||||
test_todo_session 'listproj with context special cases' <<EOF
|
||||
>>> todo.sh -+ -d "$TEST_TODO_CUSTOM" listproj @garden
|
||||
+landscape
|
||||
+shared
|
||||
+sunflowers
|
||||
EOF
|
||||
|
||||
test_done
|
||||
@@ -94,6 +94,40 @@ TODO: 1 of 3 tasks shown
|
||||
TODO: 1 of 3 tasks shown
|
||||
EOF
|
||||
|
||||
#
|
||||
# check the filtering of TERM containing characters that are special to the
|
||||
# shell, like variables, quotes, and multiple subsequent spaces.
|
||||
#
|
||||
cat > todo.txt <<'EOF'
|
||||
earn some pennies
|
||||
earn some $$
|
||||
earn some "money"
|
||||
get money from O'Brian
|
||||
just get money!
|
||||
EOF
|
||||
test_todo_session 'checking filtering of special characters' <<'EOF'
|
||||
>>> todo.sh ls '$$'
|
||||
2 earn some $$
|
||||
--
|
||||
TODO: 1 of 5 tasks shown
|
||||
|
||||
>>> todo.sh ls '"money"'
|
||||
3 earn some "money"
|
||||
--
|
||||
TODO: 1 of 5 tasks shown
|
||||
|
||||
>>> todo.sh ls "O'Brian"
|
||||
4 get money from O'Brian
|
||||
--
|
||||
TODO: 1 of 5 tasks shown
|
||||
|
||||
>>> todo.sh ls "get money"
|
||||
5 just get money!
|
||||
--
|
||||
TODO: 1 of 5 tasks shown
|
||||
EOF
|
||||
|
||||
|
||||
#
|
||||
# check the x command line option
|
||||
#
|
||||
|
||||
73
todo.sh
73
todo.sh
@@ -59,7 +59,7 @@ shorthelp()
|
||||
listcon|lsc
|
||||
listfile|lf SRC [TERM...]
|
||||
listpri|lsp [PRIORITY] [TERM...]
|
||||
listproj|lsprj
|
||||
listproj|lsprj [TERM...]
|
||||
move|mv ITEM# DEST [SRC]
|
||||
prepend|prep ITEM# "TEXT TO PREPEND"
|
||||
pri|p ITEM# PRIORITY
|
||||
@@ -633,6 +633,42 @@ _addto() {
|
||||
fi
|
||||
}
|
||||
|
||||
shellquote()
|
||||
{
|
||||
typeset -r qq=\'; printf %s\\n "'${1//\'/${qq}\\${qq}${qq}}'";
|
||||
}
|
||||
|
||||
filtercommand()
|
||||
{
|
||||
filter=${1:-}
|
||||
shift
|
||||
post_filter=${1:-}
|
||||
shift
|
||||
|
||||
for search_term
|
||||
do
|
||||
## See if the first character of $search_term is a dash
|
||||
if [ "${search_term:0:1}" != '-' ]
|
||||
then
|
||||
## First character isn't a dash: hide lines that don't match
|
||||
## this $search_term
|
||||
filter="${filter:-}${filter:+ | }grep -i $(shellquote "$search_term")"
|
||||
else
|
||||
## First character is a dash: hide lines that match this
|
||||
## $search_term
|
||||
#
|
||||
## Remove the first character (-) before adding to our filter command
|
||||
filter="${filter:-}${filter:+ | }grep -v -i '$(shellquote "${search_term:1}")'"
|
||||
fi
|
||||
done
|
||||
|
||||
[ -n "$post_filter" ] && {
|
||||
filter="${filter:-}${filter:+ | }${post_filter:-}"
|
||||
}
|
||||
|
||||
printf %s "$filter"
|
||||
}
|
||||
|
||||
_list() {
|
||||
local FILE="$1"
|
||||
## If the file starts with a "/" use absolute path. Otherwise,
|
||||
@@ -656,32 +692,8 @@ _list() {
|
||||
## Get our search arguments, if any
|
||||
shift ## was file name, new $1 is first search term
|
||||
|
||||
## Prefix the filter_command with the pre_filter_command
|
||||
filter_command="${pre_filter_command:-}"
|
||||
|
||||
for search_term
|
||||
do
|
||||
## See if the first character of $search_term is a dash
|
||||
if [ "${search_term:0:1}" != '-' ]
|
||||
then
|
||||
## First character isn't a dash: hide lines that don't match
|
||||
## this $search_term
|
||||
filter_command="${filter_command:-} ${filter_command:+|} \
|
||||
grep -i \"$search_term\" "
|
||||
else
|
||||
## First character is a dash: hide lines that match this
|
||||
## $search_term
|
||||
#
|
||||
## Remove the first character (-) before adding to our filter command
|
||||
filter_command="${filter_command:-} ${filter_command:+|} \
|
||||
grep -v -i \"${search_term:1}\" "
|
||||
fi
|
||||
done
|
||||
|
||||
## If post_filter_command is set, append it to the filter_command
|
||||
[ -n "$post_filter_command" ] && {
|
||||
filter_command="${filter_command:-}${filter_command:+ | }${post_filter_command:-}"
|
||||
}
|
||||
## Build the filter.
|
||||
filter_command=$(filtercommand "${pre_filter_command:-}" "${post_filter_command:-}" "$@")
|
||||
|
||||
## Figure out how much padding we need to use
|
||||
## We need one level of padding for each power of 10 $LINES uses
|
||||
@@ -699,7 +711,7 @@ _list() {
|
||||
| grep -v "^[ 0-9]\+ *$"
|
||||
)
|
||||
if [ "${filter_command}" ]; then
|
||||
filtered_items=$(echo -n "$items" | eval ${filter_command})
|
||||
filtered_items=$(echo -n "$items" | eval "${filter_command}")
|
||||
else
|
||||
filtered_items=$items
|
||||
fi
|
||||
@@ -752,7 +764,7 @@ _list() {
|
||||
fi
|
||||
}
|
||||
|
||||
export -f cleaninput _list die
|
||||
export -f cleaninput shellquote filtercommand _list die
|
||||
|
||||
# == HANDLE ACTION ==
|
||||
action=$( printf "%s\n" "$ACTION" | tr 'A-Z' 'a-z' )
|
||||
@@ -1007,7 +1019,8 @@ case $action in
|
||||
;;
|
||||
|
||||
"listproj" | "lsprj" )
|
||||
grep -o '[^ ]*+[^ ]\+' "$TODO_FILE" | grep '^+' | sort -u
|
||||
shift
|
||||
eval "$(filtercommand 'cat "$TODO_FILE"' '' "$@")" | grep -o '[^ ]*+[^ ]\+' | grep '^+' | sort -u
|
||||
;;
|
||||
|
||||
"listpri" | "lsp" )
|
||||
|
||||
Reference in New Issue
Block a user