diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Unix/Type/_perl_builtin_funcs | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/Completion/Unix/Type/_perl_builtin_funcs b/Completion/Unix/Type/_perl_builtin_funcs index 65eebf9b1..1c01a0dd6 100644 --- a/Completion/Unix/Type/_perl_builtin_funcs +++ b/Completion/Unix/Type/_perl_builtin_funcs @@ -1,31 +1,33 @@ #autoload # -# _perl_builtin_funcs - zsh completion function -# -# Adam Spiers <adam@spiers.net> -# -# Calculate all built-in Perl functions. The result is cached +# Parses perlfunc(1) to get a list of perl functions. The result is cached # for future use. -# -if [[ ${+_perl_builtin_funcs} -eq 0 ]]; then +if (( ! $+_perl_builtin_funcs )); then typeset -agU _perl_builtin_funcs local perlfunc - if [[ -n "${perlfunc:=$(man -w perlfunc 2>/dev/null; print -l ${^manpath}/man1/perlfunc.1(N) {/usr/man,/usr/share/man,/usr/local/man}/man1/perlfunc.1(N))}" ]]; then - _perl_builtin_funcs=( `perl -lne ' - $in_funcs++, next if /Alphabetical/; \ - next unless $in_funcs; \ - if (/^\.Ip "(\w+)/) { \ - print $1 unless $func{$1}; $func{$1}++ \ - }' $=perlfunc` - ) + if [[ -n "${perlfunc:=$(man -w perlfunc 2>/dev/null; print -l ${^manpath:-${(s.:.)$(manpath)}}/man1/perlfunc.1(|[zZ]|gz|bz2)(N) {/usr/man,/usr/share/man,/usr/local/man}/man1/perlfunc.1(|[zZ]|gz|bz2)(N))}" ]]; then + case $perlfunc in + *.bz2) perlfunc="bzip2 -cd $perlfunc" ;; + *[zZ]) perlfunc="gzip -cd $perlfunc" ;; + *) perlfunc="cat $perlfunc" ;; + esac + _perl_builtin_funcs=( + $($=perlfunc | perl -lne ' + $in_funcs++, next if /Alphabetical/; + next unless $in_funcs; + if (/^\.I[pP] "(\w+)/) { + print $1 unless $func{$1}; $func{$1}++ + }') + ) else - echo "Couldn't find perlfunc man page; giving up." + _message "can't find perlfunc man page; giving up" return 1 fi fi local expl -_wanted functions expl 'Perl built-in functions' compadd -a _perl_builtin_funcs +_wanted functions expl 'perl built-in function' compadd "$@" -a - \ + _perl_builtin_funcs |