Compare commits

..

2 Commits

Author SHA1 Message Date
Ingo Karkat
d7a43c4143 Strip trailing whitespace when completing tasks. 2012-01-09 15:41:04 +01:00
Ingo Karkat
248c56367f 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.
2012-01-09 15:23:22 +01:00
2 changed files with 26 additions and 21 deletions

19
todo.sh
View File

@@ -87,10 +87,10 @@ help()
Options: Options:
-@ -@
Hide context names in list output. Use twice to show context Hide context names in list output. Use twice to show context
names (default). names (default).
-+ -+
Hide project names in list output. Use twice to show project Hide project names in list output. Use twice to show project
names (default). names (default).
-c -c
Color mode Color mode
@@ -103,7 +103,7 @@ help()
-p -p
Plain mode turns off colors Plain mode turns off colors
-P -P
Hide priority labels in list output. Use twice to show Hide priority labels in list output. Use twice to show
priority labels (default). priority labels (default).
-a -a
Don't auto-archive tasks automatically on completion Don't auto-archive tasks automatically on completion
@@ -199,15 +199,12 @@ help()
list [TERM...] list [TERM...]
ls [TERM...] ls [TERM...]
Displays all tasks that contain TERM(s) sorted by priority with line Displays all tasks that contain TERM(s) sorted by priority with line
numbers. Each task must match all TERMs (logical AND); to display numbers. If no TERM specified, lists entire todo.txt.
tasks that contain any TERM (logical OR), use
"TERM1\|TERM2\|..." (with quotes), or TERM1\\\|TERM2 (unquoted).
If no TERM specified, lists entire todo.txt.
listall [TERM...] listall [TERM...]
lsa [TERM...] lsa [TERM...]
Displays all the lines in todo.txt AND done.txt that contain TERM(s) Displays all the lines in todo.txt AND done.txt that contain TERM(s)
sorted by priority with line numbers. If no TERM specified, lists sorted by priority with line numbers. If no TERM specified, lists
entire todo.txt AND done.txt concatenated and sorted. entire todo.txt AND done.txt concatenated and sorted.
listcon listcon
@@ -217,8 +214,8 @@ help()
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(s) in SRC file. all lines that contain TERM in SRC file.
Without any arguments, the names of all text files in the todo.txt Without any arguments, the names of all text files in the todo.txt
directory are listed. directory are listed.
@@ -226,7 +223,7 @@ help()
lsp [PRIORITY] [TERM...] lsp [PRIORITY] [TERM...]
Displays all tasks prioritized PRIORITY. Displays all tasks prioritized PRIORITY.
If no PRIORITY specified, lists all prioritized tasks. If no PRIORITY specified, lists all prioritized tasks.
If TERM specified, lists only prioritized tasks that contain TERM(s). If TERM specified, lists only prioritized tasks that contain TERM.
listproj listproj
lsprj lsprj

View File

@@ -38,20 +38,28 @@ _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.
# Remove any trailing whitespace; the Bash
# completion inserts a trailing space itself.
# 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 's/[[:space:]]*$//' \
-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