1
#compdef devtodo todo tda tde tdd tdr
2
## completion for devtodo 0.1.20 <http://swapoff.org/DevTodo>
4
typeset -a arg_generic arg_add todo_opts \
6
typeset -A arg_pair arg_desc
10
for ((i=2; i <= $#words; i++)) {
11
if [[ $words[$i] == '--database' ]] {
12
todo_opts+=(--database ${~words[$((++i))]})
16
priorities=(verylow low medium high veryhigh)
19
'-p[priority]:priority:_todo_priority'
20
'-g[parent item]:parent:_todo_index'
24
'--remove[remove items]:index:_todo_index'
25
'--database[database file]:file:_files'
26
'--global-database[global database file]:file:_files'
27
'*--colour[item color]:color:_todo_color'
28
'--force-colour[force use of colors]'
30
'--help[display help]'
31
'--version[display version]'
32
'--title[todo title]:string: '
33
'--date-format[strftime time formet]:time string: '
34
'*--format[define format]:format:_todo_format'
35
'*--use-format[output format]:format:_todo_format'
36
'--sort[sort database]:sort expression:_todo_sort'
37
'--paranoid[paranoid parmissions etc]'
38
'--database-loaders[loader order]:database loader: '
39
'--backup[backup database]:count: '
40
'--timeout[display timeout]:seconds: '
41
'--purge[purge completed items]:days: '
42
'*'{'--filter','-f'}'[show items matching filter]:filter:_todo_filter'
62
'verbose' '[be verbose]'
63
'add' '[add item]:item'
64
'graft' '[parent item]:parent:_todo_index'
65
'link' '[link file into database]:database:_files'
66
'reparent' '[change item parent]:index:_todo_index'
67
'priority' '[item priority]:priority:_todo_priority'
68
'edit' '[edit item]:index:_todo_index'
69
'done' '[mark as done]:index:_todo_index'
70
'not-done' '[mark as undone]:index:_todo_index -u'
71
'global' '[use global database]'
72
'TODO' '[generate TODO file]'
73
'all' '[show all items]'
76
for arg in ${(k)arg_pair}; {
77
arg_generic+='(--'$arg')-'${arg_pair[$arg]}${arg_desc[$arg]}
78
arg_generic+='(-'${arg_pair[$arg]}')--'${arg}${arg_desc[$arg]}
81
function _todo_index () {
82
typeset number text i entry last_entry depth last_depth=0 IFS=$'\n'
86
-u) todo_opts+=(--filter done)
89
for entry in $(todo $todo_opts -f +children --format display='%1>%i%n:%t\n'); do
91
depth=$(( ${#number} - ${#${number// }} ))
92
((depth)) && entry=${(j:.:)${${(s:.:):-a.${last_entry%%:*}}[2,depth+1]}}.$entry
94
number=${${entry%%:*}// }
100
_describe -t items index index
103
function _todo_color () {
104
if compset -P '*='; then
105
_wanted color expl 'color' \
106
compadd black red green yellow blue magenta cyan white default
108
_wanted item expl 'item' \
109
compadd -S '=' $priorities title info
113
function _todo_filter {
115
if [[ ${#${words[$CURRENT]}} -gt 0 ]] {
116
prefix=${${words[$CURRENT]}[1]}
117
_wanted expression expl 'filter expression' \
118
compadd -p $prefix -- all children done $priorities
120
# XXX the '-' makes problems
121
_wanted expression expl 'filter expression' \
122
compadd -S '' -- - + = all children done $priorities
126
function _todo_format () {
128
if [[ -prefix *= ]] {
129
_message 'format string'
131
_wanted expression expl 'format name' \
132
compadd -S '=' display generated verbose-display verbose-generated
136
function _todo_priority () {
137
_wanted priority expl 'priority' \
138
compadd default $priorities
141
function _todo_sort () {
142
typeset -a keys used_prefixes
143
typeset key prefix=''
144
keys=(created completed text priority duration none done)
146
[[ $key != none ]] && keys+="-$key"
149
if [[ -prefix *, ]] {
150
prefix=${words[$CURRENT]%,*},
151
used_prefixes=(${(s:,:)prefix})
152
for key in $used_prefixes; {
153
[[ $key == -* ]] && used_prefixes+=$key[2,-1] || used_prefixes+=-$key
156
_wanted expression expl 'sort expression' \
157
compadd -F used_prefixes -qS , -P "$prefix" $keys
162
_arguments -s $arg_add
165
_arguments -s ':index:_todo_index'
168
zstyle ':completion:*:tdr:*' ignore-line yes
169
_arguments -s '*:index:_todo_index'
172
_arguments -s $arg_generic