1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#compdef -k complete-word \C-xh
_complete_help() {
eval "$_comp_setup"
local _sort_tags=_help_sort_tags text i j k tmp
typeset -A help_funcs help_tags help_sfuncs help_styles
local -H _help_scan_funcstack="main_complete|complete|approximate|normal"
local -H _help_filter_funcstack="alternative|call_function|describe|dispatch|wanted|requested|all_labels|next_label"
{
compadd() { return 1 }
compcall() { _help_sort_tags use-compctl }
zstyle() {
local _f="${${(@)${(@)funcstack[2,(i)_($~_help_scan_funcstack)]}:#(_($~_help_filter_funcstack)|\((eval|anon)\))}% *}"
[[ -z "$_f" ]] && _f="${${(@)funcstack[2,(i)_($~_help_scan_funcstack)]}:#(_($~_help_filter_funcstack)|\((eval|anon)\))}"
if [[ "$help_sfuncs[$2]" != *${_f}* ||
"$help_styles[${2}${_f}]" != *${3}* ]]; then
[[ "$help_sfuncs[$2]" != *${_f}* ]] && help_sfuncs[$2]+=$'\0'"${_f}"
local _t
case "$1" in
-s) _t='[string] ';;
-a) _t='[array] ';;
-h) _t='[assoc] ';;
*) _t='[boolean]';;
esac
help_styles[${2}${_f}]+=",${_t} ${3}:${_f}"
fi
# No need to call the completers more than once with different match specs.
if [[ "$3" = matcher-list ]]; then
set -A "$4" ''
else
builtin zstyle "$@"
fi
}
${1:-_main_complete}
} always {
unfunction compadd compcall zstyle
}
for i in "${(@ok)help_funcs}"; do
text+=$'\n'"tags in context :completion:${i}:"
tmp=()
for j in "${(@ps.\0.)help_funcs[$i][2,-1]}"; do
tmp+=( "${(@s.,.)help_tags[${i}${j}][2,-1]}" )
done
zformat -a tmp ' (' "$tmp[@]"
tmp=( $'\n '${^tmp}')' )
text+="${tmp}"
done
if [[ ${NUMERIC:-1} -ne 1 ]]; then
text+=$'\n'
for i in "${(@ok)help_sfuncs}"; do
text+=$'\n'"styles in context ${i}"
tmp=()
for j in "${(@ps.\0.)help_sfuncs[$i][2,-1]}"; do
tmp+=( "${(@s.,.)help_styles[${i}${j}][2,-1]}" )
done
zformat -a tmp ' (' "$tmp[@]"
tmp=( $'\n '${^tmp}')' )
text+="${tmp}"
done
fi
compstate[list]='list force'
compstate[insert]=''
compadd -UX "$text[2,-1]" -n ''
}
_help_sort_tags() {
local f="${${(@)${(@)funcstack[3,(i)_($~_help_scan_funcstack)]}:#(_($~_help_filter_funcstack)|\((eval|anon)\))}% *}"
if [[ "$help_funcs[$curcontext]" != *${f}* ||
"$help_tags[${curcontext}${f}]" != *(${(j:|:)~argv})* ]]; then
[[ "$help_funcs[$curcontext]" != *${f}* ]] &&
help_funcs[$curcontext]+=$'\0'"${f}"
help_tags[${curcontext}${f}]+=",${argv}:${f}"
comptry "$@"
fi
}
_complete_help "$@"
|