diff options
Diffstat (limited to 'Completion/Unix')
-rw-r--r-- | Completion/Unix/Command/.distfiles | 1 | ||||
-rw-r--r-- | Completion/Unix/Command/_devtodo | 174 |
2 files changed, 175 insertions, 0 deletions
diff --git a/Completion/Unix/Command/.distfiles b/Completion/Unix/Command/.distfiles index 9d74c518a..115f2d930 100644 --- a/Completion/Unix/Command/.distfiles +++ b/Completion/Unix/Command/.distfiles @@ -38,6 +38,7 @@ _cvs _darcs _date _dd +_devtodo _dhclient _dict _diff diff --git a/Completion/Unix/Command/_devtodo b/Completion/Unix/Command/_devtodo new file mode 100644 index 000000000..06fc675fc --- /dev/null +++ b/Completion/Unix/Command/_devtodo @@ -0,0 +1,174 @@ +#compdef devtodo todo tda tde tdd tdr +## completion for devtodo 0.1.20 <http://swapoff.org/DevTodo> + +typeset -a arg_generic arg_add todo_opts \ + priorities +typeset -A arg_pair arg_desc +typeset -i i +typeset expl + +for ((i=2; i <= $#words; i++)) { + if [[ $words[$i] == '--database' ]] { + todo_opts+=(--database ${~words[$((++i))]}) + } +} + +priorities=(verylow low medium high veryhigh) + +arg_add=( + '-p[priority]:priority:_todo_priority' + '-g[parent item]:parent:_todo_index' +) + +arg_generic=( + '--remove[remove items]:index:_todo_index' + '--database[database file]:file:_files' + '--global-database[global database file]:file:_files' + '*--colour[item color]:color:_todo_color' + '--force-colour[force use of colors]' + '--mono[no colors]' + '--help[display help]' + '--version[display version]' + '--title[todo title]:string: ' + '--date-format[strftime time formet]:time string: ' + '*--format[define format]:format:_todo_format' + '*--use-format[output format]:format:_todo_format' + '--sort[sort database]:sort expression:_todo_sort' + '--paranoid[paranoid parmissions etc]' + '--database-loaders[loader order]:database loader: ' + '--backup[backup database]:count: ' + '--timeout[display timeout]:seconds: ' + '--purge[purge completed items]:days: ' + '*'{'--filter','-f'}'[show items matching filter]:filter:_todo_filter' + '*::item:_todo_index' +) + +arg_pair=( + 'verbose' 'v' + 'add' 'a' + 'graft' 'g' + 'link' 'l' + 'reparent' 'R' + 'priority' 'p' + 'edit' 'e' + 'done' 'd' + 'not-done' 'D' + 'global' 'G' + 'TODO' 'T' + 'all' 'A' +) + +arg_desc=( + 'verbose' '[be verbose]' + 'add' '[add item]:item' + 'graft' '[parent item]:parent:_todo_index' + 'link' '[link file into database]:database:_files' + 'reparent' '[change item parent]:index:_todo_index' + 'priority' '[item priority]:priority:_todo_priority' + 'edit' '[edit item]:index:_todo_index' + 'done' '[mark as done]:index:_todo_index' + 'not-done' '[mark as undone]:index:_todo_index -u' + 'global' '[use global database]' + 'TODO' '[generate TODO file]' + 'all' '[show all items]' +) + +for arg in ${(k)arg_pair}; { + arg_generic+='(--'$arg')-'${arg_pair[$arg]}${arg_desc[$arg]} + arg_generic+='(-'${arg_pair[$arg]}')--'${arg}${arg_desc[$arg]} +} + +function _todo_index () { + typeset number text i entry last_entry depth last_depth=0 IFS=$'\n' + typeset -a index desc + for i in $*; do + case $i in + -u) todo_opts+=(--filter done) + esac + done + for entry in $(todo $todo_opts -f +children --format display='%1>%i%n:%t\n'); do + number=${entry%%:*} + depth=$(( ${#number} - ${#${number// }} )) + ((depth)) && entry=${(j:.:)${${(s:.:):-a.${last_entry%%:*}}[2,depth+1]}}.$entry + text=${entry#*:} + number=${${entry%%:*}// } + entry=$number:$text + index+=$entry + last_depth=$depth + last_entry=$entry + done + _describe -t items index index +} + +function _todo_color () { + if compset -P '*='; then + _wanted color expl 'color' \ + compadd black red green yellow blue magenta cyan white default + else + _wanted item expl 'item' \ + compadd -S '=' $priorities title info + fi +} + +function _todo_filter { + typeset prefix + if [[ ${#${words[$CURRENT]}} -gt 0 ]] { + prefix=${${words[$CURRENT]}[1]} + _wanted expression expl 'filter expression' \ + compadd -p $prefix -- all children done $priorities + } else { + # XXX the '-' makes problems + _wanted expression expl 'filter expression' \ + compadd -S '' -- - + = all children done $priorities + } +} + +function _todo_format () { + typeset prefix + if [[ -prefix *= ]] { + _message 'format string' + } else { + _wanted expression expl 'format name' \ + compadd -S '=' display generated verbose-display verbose-generated + } +} + +function _todo_priority () { + _wanted priority expl 'priority' \ + compadd default $priorities +} + +function _todo_sort () { + typeset -a keys used_prefixes + typeset key prefix='' + keys=(created completed text priority duration none done) + for key in $keys; { + [[ $key != none ]] && keys+="-$key" + } + + if [[ -prefix *, ]] { + prefix=${words[$CURRENT]%,*}, + used_prefixes=(${(s:,:)prefix}) + for key in $used_prefixes; { + [[ $key == -* ]] && used_prefixes+=$key[2,-1] || used_prefixes+=-$key + } + } + _wanted expression expl 'sort expression' \ + compadd -F used_prefixes -qS , -P "$prefix" $keys +} + +case $service in + tda) + _arguments -s $arg_add + ;; + tde|tdd) + _arguments -s ':index:_todo_index' + ;; + tdr) + zstyle ':completion:*:tdr:*' ignore-line yes + _arguments -s '*:index:_todo_index' + ;; + *todo) + _arguments -s $arg_generic + ;; +esac |