diff options
Diffstat (limited to 'etc/completions')
-rw-r--r-- | etc/completions/_devtodo | 84 | ||||
-rw-r--r-- | etc/completions/_pkill | 3 | ||||
-rw-r--r-- | etc/completions/_sort | 32 |
3 files changed, 61 insertions, 58 deletions
diff --git a/etc/completions/_devtodo b/etc/completions/_devtodo index 79f6fe1..b367eea 100644 --- a/etc/completions/_devtodo +++ b/etc/completions/_devtodo @@ -18,31 +18,31 @@ for ((i=2; i <= $#words; i++)) { priorities=(verylow low medium high veryhigh) arg_add=( - '-p[priority]:priority:_priority' - '-g[parent item]:parent:_index' + '-p[priority]:priority:_todo_priority' + '-g[parent item]:parent:_todo_index' ) arg_generic=( - '--remove[remove items]:index:_index' + '--remove[remove items]:index:_todo_index' '--database[database file]:file:_files' '--global-database[global database file]:file:_files' - '*--colour[item color]:color:_color' + '*--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:_format' - '*--use-format[output format]:format:_format' - '--sort[sort database]:expression: ' + '*--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:_filter' -# '*::item:_index' + '*'{'--filter','-f'}'[show items matching filter]:filter:_todo_filter' +# '*::item:_todo_index' ) arg_pair=( @@ -63,13 +63,13 @@ arg_pair=( arg_desc=( 'verbose' '[be verbose]' 'add' '[add item]:item' - 'graft' '[parent item]:parent:_index' + 'graft' '[parent item]:parent:_todo_index' 'link' '[link file into database]:database:_files' - 'reparent' '[change item parent]:index:_index' - 'priority' '[item priority]:priority:_priority' - 'edit' '[edit item]:index:_index' - 'done' '[mark as done]:index:_index' - 'not-done' '[mark as undone]:index:_index -u' + '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]' @@ -80,21 +80,29 @@ for arg in ${(k)arg_pair}; { arg_generic+='(-'${arg_pair[$arg]}')--'${arg}${arg_desc[$arg]} } -function _index () { - typeset i +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 i in $(todo $todo_opts --format display='%n '); do - index+=${i}:$(todo $todo_opts --format display='%t' $i) + 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 _color () { +function _todo_color () { if compset -P '*='; then _wanted color expl 'color' \ compadd black red green yellow blue magenta cyan white default @@ -104,7 +112,7 @@ function _color () { fi } -function _filter { +function _todo_filter { typeset prefix if [[ ${#${words[$CURRENT]}} -gt 0 ]] { prefix=${${words[$CURRENT]}[1]} @@ -117,24 +125,50 @@ function _filter { } } -function _format () { +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 _priority () { +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:_index' + _arguments -s ':index:_todo_index' ;; tdr) zstyle ':completion:*:tdr:*' ignore-line yes - _arguments -s '*:index:_index' + _arguments -s '*:index:_todo_index' ;; *todo) _arguments -s $arg_generic diff --git a/etc/completions/_pkill b/etc/completions/_pkill index 35f5082..150cf32 100644 --- a/etc/completions/_pkill +++ b/etc/completions/_pkill @@ -42,7 +42,8 @@ function _named_process { if (( EUID )) { pgrep_user=(-u $EUID) } - _wanted pattern expl 'pattern or process name' \ + _message 'pattern' + _wanted pattern expl 'process name' \ compadd ${$(pgrep $pgrep_user -l '')#* } } diff --git a/etc/completions/_sort b/etc/completions/_sort deleted file mode 100644 index 6d6bc55..0000000 --- a/etc/completions/_sort +++ /dev/null @@ -1,32 +0,0 @@ -#compdef sort -## Quick, dirty and probably incomplete sort completion -## Copyright (C) 2008 by Daniel Friesel <derf@derf.homelinux.org> -## License: WTFPL <http://sam.zoy.org/wtfpl> - -typeset -a arguments - -arguments=( - '-b[ignore leading blanks]' - '-d[dictionary/alphabetical sort]' - '-f[ignore case]' - '-g[general numeric sort]' - '-i[ignore non-printable characters]' - '-M[sort by month]' - '-n[string numeric sort]' - '-R[random sort]' - '--random-source=-[entropy source]:file:_files' - '-r[reverse sort]' - '-c[check if input is sorted]' - '-C[quietly check if input is sorted]' - '-k' - '-m[merge sorted files]' - '-o[output file]:output file:_files' - '-s[stabilize sort]' - '-S[set buffer size]:buffer size' - '-t[set field separator]:field seprarator' - '-T[set temporary directory]:tmpdir:_path_files -/' - '-u[unique output]' - '-z[end lines with 0 byte]' -) - -_arguments -s $arguments |