Compare commits
24 Commits
archive/in
...
upstream
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da683366f4 | ||
|
|
7b5c983bb6 | ||
|
|
f67f630466 | ||
|
|
fe27b10765 | ||
|
|
137140a542 | ||
|
|
322c6b95d6 | ||
|
|
28e8a4cd8b | ||
|
|
7f1bdbf3d9 | ||
|
|
a5481990fd | ||
|
|
38d75afeff | ||
|
|
6a3ddad787 | ||
|
|
736e69bd6c | ||
|
|
d2c44e9ffe | ||
|
|
f45bbd1a1d | ||
|
|
e0b93e48fb | ||
|
|
24d0fb003a | ||
|
|
3b0309d9bc | ||
|
|
b21d16878f | ||
|
|
3e82f3ca56 | ||
|
|
e5e31b0f75 | ||
|
|
35f9c4276c | ||
|
|
661dac0cfb | ||
|
|
d7056c5e1e | ||
|
|
92322e7064 |
@@ -9,8 +9,15 @@ On failure, it will print each offending line number and line.
|
|||||||
'
|
'
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
|
backtick_check()
|
||||||
|
{
|
||||||
|
sed -n -e 's/\(^\|[ \t]\)#.*//' -e '/`/{' -e '=;p' -e '}' "$@"
|
||||||
|
}
|
||||||
|
|
||||||
test_todo_session 'no old-style backtick command substitution' <<EOF
|
test_todo_session 'no old-style backtick command substitution' <<EOF
|
||||||
>>> sed -n -e 's/\(^\|[ \t]\)#.*//' -e '/\`/{' -e '=;p' -e '}' "$(which todo.sh)"
|
>>> backtick_check bin/todo.sh
|
||||||
|
|
||||||
|
>>> backtick_check ../../todo.cfg
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|||||||
@@ -164,4 +164,12 @@ TODO: Replaced task with:
|
|||||||
1 (A) 2010-07-04 this also has a new date
|
1 (A) 2010-07-04 this also has a new date
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
echo '2009-02-13 this is just a new one' > todo.txt
|
||||||
|
test_todo_session 'replace with prepended priority and date replaces existing date' <<EOF
|
||||||
|
>>> todo.sh replace 1 '(B) 2010-07-04 this also has a new date'
|
||||||
|
1 2009-02-13 this is just a new one
|
||||||
|
TODO: Replaced task with:
|
||||||
|
1 (B) 2010-07-04 this also has a new date
|
||||||
|
EOF
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|||||||
@@ -55,6 +55,16 @@ test_todo_session 'listcon e-mail address test' <<EOF
|
|||||||
@con02
|
@con02
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
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 'listcon with project' <<EOF
|
||||||
|
>>> todo.sh listcon +landscape
|
||||||
|
@garden
|
||||||
|
EOF
|
||||||
|
|
||||||
cat > todo.txt <<EOF
|
cat > todo.txt <<EOF
|
||||||
@con01 -- Some context 1 task
|
@con01 -- Some context 1 task
|
||||||
EOF
|
EOF
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ notice the sunflowers +sunflowers @outside @garden +shared +landscape
|
|||||||
(C) 2012-02-28 @outside mow the lawn
|
(C) 2012-02-28 @outside mow the lawn
|
||||||
x 2012-02-21 +herbs @oriental buy spices
|
x 2012-02-21 +herbs @oriental buy spices
|
||||||
x 2012-02-28 2012-02-21 +slack @home watch tv
|
x 2012-02-28 2012-02-21 +slack @home watch tv
|
||||||
|
2012-02-28 +herbs buy cinnamon @grocer
|
||||||
EOF
|
EOF
|
||||||
test_todo_completion 'simple task' 'todo.sh list 1' '"1 # simple task"'
|
test_todo_completion 'simple task' 'todo.sh list 1' '"1 # simple task"'
|
||||||
test_todo_completion 'remove projects and contents from task' 'todo.sh list 2' '"2 # notice the sunflowers"'
|
test_todo_completion 'remove projects and contents from task' 'todo.sh list 2' '"2 # notice the sunflowers"'
|
||||||
@@ -21,5 +22,6 @@ test_todo_completion 'keep priority' 'todo.sh list 3' '"3 # (B) smell the flower
|
|||||||
test_todo_completion 'keep priority and remove timestamp' 'todo.sh list 4' '"4 # (C) mow the lawn"'
|
test_todo_completion 'keep priority and remove timestamp' 'todo.sh list 4' '"4 # (C) mow the lawn"'
|
||||||
test_todo_completion 'keep done marker and remove done date' 'todo.sh list 5' '"5 # x buy spices"'
|
test_todo_completion 'keep done marker and remove done date' 'todo.sh list 5' '"5 # x buy spices"'
|
||||||
test_todo_completion 'keep done marker and remove timestamp and done date' 'todo.sh list 6' '"6 # x watch tv"'
|
test_todo_completion 'keep done marker and remove timestamp and done date' 'todo.sh list 6' '"6 # x watch tv"'
|
||||||
|
test_todo_completion 'remove add date' 'todo.sh list 7' '"7 # buy cinnamon"'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|||||||
@@ -264,25 +264,7 @@ test_expect_success () {
|
|||||||
test_expect_output () {
|
test_expect_output () {
|
||||||
test "$#" = 2 ||
|
test "$#" = 2 ||
|
||||||
error "bug in the test script: not 2 parameters to test-expect-output"
|
error "bug in the test script: not 2 parameters to test-expect-output"
|
||||||
if ! test_skip "$@"
|
test_expect_code_and_output 0 "$@"
|
||||||
then
|
|
||||||
say >&3 "expecting success and output: $2"
|
|
||||||
test_run_ "$2"
|
|
||||||
if [ "$?" = 0 -a "$eval_ret" = 0 ]
|
|
||||||
then
|
|
||||||
cmp_output=$(test_cmp expect output)
|
|
||||||
if [ "$?" = 0 ]
|
|
||||||
then
|
|
||||||
test_ok_ "$1"
|
|
||||||
else
|
|
||||||
test_failure_ "$@" "
|
|
||||||
$cmp_output"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
test_failure_ "$@"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo >&3 ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test_expect_code_and_output () {
|
test_expect_code_and_output () {
|
||||||
@@ -290,7 +272,11 @@ test_expect_code_and_output () {
|
|||||||
error "bug in the test script: not 3 parameters to test-expect-code-and-output"
|
error "bug in the test script: not 3 parameters to test-expect-code-and-output"
|
||||||
if ! test_skip "$@"
|
if ! test_skip "$@"
|
||||||
then
|
then
|
||||||
|
if [ "$1" = 0 ]; then
|
||||||
|
say >&3 "expecting success and output: $3"
|
||||||
|
else
|
||||||
say >&3 "expecting exit code $1 and output: $3"
|
say >&3 "expecting exit code $1 and output: $3"
|
||||||
|
fi
|
||||||
test_run_ "$3"
|
test_run_ "$3"
|
||||||
if [ "$?" = 0 -a "$eval_ret" = "$1" ]
|
if [ "$?" = 0 -a "$eval_ret" = "$1" ]
|
||||||
then
|
then
|
||||||
@@ -566,14 +552,16 @@ test_tick () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Generate and run a series of tests based on a transcript.
|
# Generate and run a series of tests based on a transcript.
|
||||||
# Usage: test_todo_session "description" <<EOF
|
# Usage: test_todo_session "description" <<'EOF'
|
||||||
# >>> command
|
# >>> command
|
||||||
# output1
|
# output1
|
||||||
# output2
|
# output2
|
||||||
|
#
|
||||||
# >>> command
|
# >>> command
|
||||||
# === exit status
|
# === exit status
|
||||||
# output3
|
# output3 with empty line (must be escaped here)
|
||||||
# output4
|
# \
|
||||||
|
# output5
|
||||||
# EOF
|
# EOF
|
||||||
test_todo_session () {
|
test_todo_session () {
|
||||||
test "$#" = 1 ||
|
test "$#" = 1 ||
|
||||||
@@ -582,7 +570,7 @@ test_todo_session () {
|
|||||||
cmd=""
|
cmd=""
|
||||||
status=0
|
status=0
|
||||||
> expect
|
> expect
|
||||||
while read -r line
|
while IFS= read -r line
|
||||||
do
|
do
|
||||||
case $line in
|
case $line in
|
||||||
">>> "*)
|
">>> "*)
|
||||||
@@ -606,6 +594,9 @@ test_todo_session () {
|
|||||||
> expect
|
> expect
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
\\)
|
||||||
|
echo "" >> expect
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "$line" >> expect
|
echo "$line" >> expect
|
||||||
;;
|
;;
|
||||||
|
|||||||
2
todo.cfg
2
todo.cfg
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Your todo.txt directory
|
# Your todo.txt directory
|
||||||
#export TODO_DIR="/Users/gina/Documents/todo"
|
#export TODO_DIR="/Users/gina/Documents/todo"
|
||||||
export TODO_DIR=`dirname "$0"`
|
export TODO_DIR=$(dirname "$0")
|
||||||
|
|
||||||
# Your todo/done/report.txt locations
|
# Your todo/done/report.txt locations
|
||||||
export TODO_FILE="$TODO_DIR/todo.txt"
|
export TODO_FILE="$TODO_DIR/todo.txt"
|
||||||
|
|||||||
50
todo.sh
50
todo.sh
@@ -58,7 +58,7 @@ shorthelp()
|
|||||||
list|ls [TERM...]
|
list|ls [TERM...]
|
||||||
listall|lsa [TERM...]
|
listall|lsa [TERM...]
|
||||||
listaddons
|
listaddons
|
||||||
listcon|lsc
|
listcon|lsc [TERM...]
|
||||||
listfile|lf [SRC [TERM...]]
|
listfile|lf [SRC [TERM...]]
|
||||||
listpri|lsp [PRIORITIES] [TERM...]
|
listpri|lsp [PRIORITIES] [TERM...]
|
||||||
listproj|lsprj [TERM...]
|
listproj|lsprj [TERM...]
|
||||||
@@ -230,9 +230,10 @@ actionsHelp()
|
|||||||
listaddons
|
listaddons
|
||||||
Lists all added and overridden actions in the actions directory.
|
Lists all added and overridden actions in the actions directory.
|
||||||
|
|
||||||
listcon
|
listcon [TERM...]
|
||||||
lsc
|
lsc [TERM...]
|
||||||
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.
|
||||||
|
If TERM specified, considers only tasks that contain TERM(s).
|
||||||
|
|
||||||
listfile [SRC [TERM...]]
|
listfile [SRC [TERM...]]
|
||||||
lf [SRC [TERM...]]
|
lf [SRC [TERM...]]
|
||||||
@@ -252,10 +253,11 @@ actionsHelp()
|
|||||||
Hides all tasks that contain TERM(s) preceded by a minus sign
|
Hides all tasks that contain TERM(s) preceded by a minus sign
|
||||||
(i.e. -TERM).
|
(i.e. -TERM).
|
||||||
|
|
||||||
listproj
|
listproj [TERM...]
|
||||||
lsprj
|
lsprj [TERM...]
|
||||||
Lists all the projects (terms that start with a + sign) in
|
Lists all the projects (terms that start with a + sign) in
|
||||||
todo.txt.
|
todo.txt.
|
||||||
|
If TERM specified, considers only tasks that contain TERM(s).
|
||||||
|
|
||||||
move ITEM# DEST [SRC]
|
move ITEM# DEST [SRC]
|
||||||
mv ITEM# DEST [SRC]
|
mv ITEM# DEST [SRC]
|
||||||
@@ -412,21 +414,22 @@ replaceOrPrepend()
|
|||||||
else
|
else
|
||||||
input=$*
|
input=$*
|
||||||
fi
|
fi
|
||||||
cleaninput "for sed"
|
|
||||||
|
|
||||||
# Retrieve existing priority and prepended date
|
# Retrieve existing priority and prepended date
|
||||||
priority=$(sed -e "$item!d" -e $item's/^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\1/' "$TODO_FILE")
|
local -r priAndDateExpr='^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}'
|
||||||
prepdate=$(sed -e "$item!d" -e $item's/^\((.) \)\{0,1\}\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{0,1\}.*/\2/' "$TODO_FILE")
|
priority=$(sed -e "$item!d" -e "${item}s/${priAndDateExpr}.*/\\1/" "$TODO_FILE")
|
||||||
|
prepdate=$(sed -e "$item!d" -e "${item}s/${priAndDateExpr}.*/\\2/" "$TODO_FILE")
|
||||||
|
|
||||||
if [ "$prepdate" -a "$action" = "replace" ] && [ "$(echo "$input"|sed -e 's/^\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\}\)\{0,1\}.*/\1/')" ]; then
|
if [ "$prepdate" -a "$action" = "replace" ] && [ "$(echo "$input"|sed -e "s/${priAndDateExpr}.*/\\1\\2/")" ]; then
|
||||||
# If the replaced text starts with a date, it will replace the existing
|
# If the replaced text starts with a [priority +] date, it will replace
|
||||||
# date, too.
|
# the existing date, too.
|
||||||
prepdate=
|
prepdate=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Temporarily remove any existing priority and prepended date, perform the
|
# Temporarily remove any existing priority and prepended date, perform the
|
||||||
# change (replace/prepend) and re-insert the existing priority and prepended
|
# change (replace/prepend) and re-insert the existing priority and prepended
|
||||||
# date again.
|
# date again.
|
||||||
|
cleaninput "for sed"
|
||||||
sed -i.bak -e "$item s/^${priority}${prepdate}//" -e "$item s|^.*|${priority}${prepdate}${input}${backref}|" "$TODO_FILE"
|
sed -i.bak -e "$item s/^${priority}${prepdate}//" -e "$item s|^.*|${priority}${prepdate}${input}${backref}|" "$TODO_FILE"
|
||||||
if [ $TODOTXT_VERBOSE -gt 0 ]; then
|
if [ $TODOTXT_VERBOSE -gt 0 ]; then
|
||||||
getNewtodo "$item"
|
getNewtodo "$item"
|
||||||
@@ -881,7 +884,17 @@ _format()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
export -f cleaninput getPrefix getTodo getNewtodo shellquote filtercommand _list getPadding _format die
|
listWordsWithSigil()
|
||||||
|
{
|
||||||
|
sigil=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
FILE=$TODO_FILE
|
||||||
|
[ "$TODOTXT_SOURCEVAR" ] && eval "FILE=$TODOTXT_SOURCEVAR"
|
||||||
|
eval "$(filtercommand 'cat "${FILE[@]}"' '' "$@")" | grep -o "[^ ]*${sigil}[^ ]\\+" | grep "^$sigil" | sort -u
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f cleaninput getPrefix getTodo getNewtodo shellquote filtercommand _list listWordsWithSigil getPadding _format die
|
||||||
|
|
||||||
# == HANDLE ACTION ==
|
# == HANDLE ACTION ==
|
||||||
action=$( printf "%s\n" "$ACTION" | tr 'A-Z' 'a-z' )
|
action=$( printf "%s\n" "$ACTION" | tr 'A-Z' 'a-z' )
|
||||||
@@ -1134,7 +1147,7 @@ case $action in
|
|||||||
TOTAL=$( sed -n '$ =' "$TODO_FILE" )
|
TOTAL=$( sed -n '$ =' "$TODO_FILE" )
|
||||||
PADDING=${#TOTAL}
|
PADDING=${#TOTAL}
|
||||||
|
|
||||||
post_filter_command="awk -v TOTAL=$TOTAL -v PADDING=$PADDING '{ \$1 = sprintf(\"%\" PADDING \"d\", (\$1 > TOTAL ? 0 : \$1)); print }' "
|
post_filter_command="${post_filter_command:-}${post_filter_command:+ | }awk -v TOTAL=$TOTAL -v PADDING=$PADDING '{ \$1 = sprintf(\"%\" PADDING \"d\", (\$1 > TOTAL ? 0 : \$1)); print }' "
|
||||||
cat "$TODO_FILE" "$DONE_FILE" | TODOTXT_VERBOSE=0 _format '' "$PADDING" "$@"
|
cat "$TODO_FILE" "$DONE_FILE" | TODOTXT_VERBOSE=0 _format '' "$PADDING" "$@"
|
||||||
|
|
||||||
if [ $TODOTXT_VERBOSE -gt 0 ]; then
|
if [ $TODOTXT_VERBOSE -gt 0 ]; then
|
||||||
@@ -1162,23 +1175,20 @@ case $action in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
"listcon" | "lsc" )
|
"listcon" | "lsc" )
|
||||||
FILE=$TODO_FILE
|
shift
|
||||||
[ "$TODOTXT_SOURCEVAR" ] && eval "FILE=$TODOTXT_SOURCEVAR"
|
listWordsWithSigil '@' "$@"
|
||||||
grep -ho '[^ ]*@[^ ]\+' "${FILE[@]}" | grep '^@' | sort -u
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"listproj" | "lsprj" )
|
"listproj" | "lsprj" )
|
||||||
FILE=$TODO_FILE
|
|
||||||
[ "$TODOTXT_SOURCEVAR" ] && eval "FILE=$TODOTXT_SOURCEVAR"
|
|
||||||
shift
|
shift
|
||||||
eval "$(filtercommand 'cat "${FILE[@]}"' '' "$@")" | grep -o '[^ ]*+[^ ]\+' | grep '^+' | sort -u
|
listWordsWithSigil '+' "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"listpri" | "lsp" )
|
"listpri" | "lsp" )
|
||||||
shift ## was "listpri", new $1 is priority to list or first TERM
|
shift ## was "listpri", new $1 is priority to list or first TERM
|
||||||
|
|
||||||
pri=$(printf "%s\n" "$1" | tr 'a-z' 'A-Z' | grep -e '^[A-Z]$' -e '^[A-Z]-[A-Z]$') && shift || pri="A-Z"
|
pri=$(printf "%s\n" "$1" | tr 'a-z' 'A-Z' | grep -e '^[A-Z]$' -e '^[A-Z]-[A-Z]$') && shift || pri="A-Z"
|
||||||
post_filter_command="grep '^ *[0-9]\+ ([${pri}]) '"
|
post_filter_command="${post_filter_command:-}${post_filter_command:+ | }grep '^ *[0-9]\+ ([${pri}]) '"
|
||||||
_list "$TODO_FILE" "$@"
|
_list "$TODO_FILE" "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -14,14 +14,15 @@ _todo()
|
|||||||
rm depri dp do help list ls listaddons listall lsa listcon \
|
rm depri dp do help list ls listaddons listall lsa listcon \
|
||||||
lsc listfile lf listpri lsp listproj lsprj move \
|
lsc listfile lf listpri lsp listproj lsprj move \
|
||||||
mv prepend prep pri p replace report shorthelp"
|
mv prepend prep pri p replace report shorthelp"
|
||||||
|
local -r MOVE_COMMAND_PATTERN='^(move|mv)$'
|
||||||
|
|
||||||
local _todo_sh=${_todo_sh:-todo.sh}
|
local _todo_sh=${_todo_sh:-todo.sh}
|
||||||
local completions
|
local completions
|
||||||
if [ $COMP_CWORD -eq 1 ]; then
|
if [ $COMP_CWORD -eq 1 ]; then
|
||||||
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS"
|
completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS"
|
||||||
elif [[ $COMP_CWORD -gt 2 && ( \
|
elif [[ $COMP_CWORD -gt 2 && ( \
|
||||||
"${COMP_WORDS[COMP_CWORD-2]}" =~ ^(move|mv)$ || \
|
"${COMP_WORDS[COMP_CWORD-2]}" =~ $MOVE_COMMAND_PATTERN || \
|
||||||
"${COMP_WORDS[COMP_CWORD-3]}" =~ ^(move|mv)$ ) ]]; then
|
"${COMP_WORDS[COMP_CWORD-3]}" =~ $MOVE_COMMAND_PATTERN ) ]]; then
|
||||||
# "move ITEM# DEST [SRC]" has file arguments on positions 2 and 3.
|
# "move ITEM# DEST [SRC]" has file arguments on positions 2 and 3.
|
||||||
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile)
|
completions=$(eval TODOTXT_VERBOSE=0 $_todo_sh command listfile)
|
||||||
else
|
else
|
||||||
@@ -60,8 +61,8 @@ _todo()
|
|||||||
# a safety check of the ls action output.
|
# a safety check of the ls action output.
|
||||||
local todo=$( \
|
local todo=$( \
|
||||||
eval TODOTXT_VERBOSE=0 $_todo_sh '-@ -+ -p -x command ls "^ *${cur} "' | \
|
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]\{1,\} //' -e 's/^\((.) \)\{0,1\}[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/^\([xX] \)\([0-9]\{2,4\}-[0-9]\{2\}-[0-9]\{2\} \)\{1,2\}/\1/' \
|
||||||
-e 's/[[:space:]]*$//' \
|
-e 's/[[:space:]]*$//' \
|
||||||
-e '1q' \
|
-e '1q' \
|
||||||
)
|
)
|
||||||
@@ -87,6 +88,9 @@ complete -F _todo todo.sh
|
|||||||
# If you define an alias (e.g. "t") to todo.sh, you need to explicitly enable
|
# If you define an alias (e.g. "t") to todo.sh, you need to explicitly enable
|
||||||
# completion for it, too:
|
# completion for it, too:
|
||||||
#complete -F _todo t
|
#complete -F _todo t
|
||||||
|
# It is recommended to put this line next to your alias definition in your
|
||||||
|
# ~/.bashrc (or wherever else you're defining your alias). If you simply
|
||||||
|
# uncomment it here, you will need to redo this on every todo.txt update!
|
||||||
|
|
||||||
# If you have renamed the todo.sh executable, or if it is not accessible through
|
# If you have renamed the todo.sh executable, or if it is not accessible through
|
||||||
# PATH, you need to add and use a wrapper completion function, like this:
|
# PATH, you need to add and use a wrapper completion function, like this:
|
||||||
|
|||||||
Reference in New Issue
Block a user