Remove task date(s) when completing prioritized and done tasks.

Replace the primitive substitutions inside the completion function with a call to sed (instead of calling head), and supply more powerful substitutions there.
This commit is contained in:
Ingo Karkat
2012-01-09 15:23:22 +01:00
parent f8a6e5f8d6
commit 248c56367f

View File

@@ -38,20 +38,25 @@ _todo()
+*) completions=$(TODOTXT_VERBOSE=0 todo.sh command listproj);; +*) completions=$(TODOTXT_VERBOSE=0 todo.sh command listproj);;
@*) completions=$(TODOTXT_VERBOSE=0 todo.sh command listcon);; @*) completions=$(TODOTXT_VERBOSE=0 todo.sh command listcon);;
*) if [[ "$cur" =~ ^[0-9]+$ ]]; then *) 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 # Remove the (padded) task number; we prepend the
# user-provided $cur. # user-provided $cur instead.
item=${item#* } # Remove the timestamp prepended by the -t option,
# and the done date (for done tasks); there's no
# Remove the timestamp prepended by the -t option; # todo.txt option for that yet.
# there's no todo.txt option for that yet. # But keep priority and "x"; they're short and may
item=${item#[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] } # provide useful context.
# Finally, limit the output to a single line just as
# a safety check of the ls action output.
local todo=$( \
TODOTXT_VERBOSE=0 todo.sh -@ -+ -p -x command ls "^ *${cur} " | \
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 '1q' \
)
# Append task text as a shell comment. This # Append task text as a shell comment. This
# completion can be a safety check before a # completion can be a safety check before a
# destructive todo.txt operation. # destructive todo.txt operation.
[ "$item" ] && COMPREPLY[0]="$cur # $item" [ "$todo" ] && COMPREPLY[0]="$cur # $todo"
return 0 return 0
else else
return 0 return 0