diff options
author | Tanaka Akira <akr@users.sourceforge.net> | 1999-08-23 10:07:44 +0000 |
---|---|---|
committer | Tanaka Akira <akr@users.sourceforge.net> | 1999-08-23 10:07:44 +0000 |
commit | c21b91b916e23f202a0ae3b2a7aafe4e595e7b5c (patch) | |
tree | 30c6fdd6dadba05d7b566ae99ca51ae980a2514e /Completion/User/_exec_funcs | |
parent | 0066a6a007cc06e959d1d040f80d1ea0e72076c2 (diff) | |
download | zsh-c21b91b916e23f202a0ae3b2a7aafe4e595e7b5c.tar.gz zsh-c21b91b916e23f202a0ae3b2a7aafe4e595e7b5c.tar.xz zsh-c21b91b916e23f202a0ae3b2a7aafe4e595e7b5c.zip |
Initial revision
Diffstat (limited to 'Completion/User/_exec_funcs')
-rw-r--r-- | Completion/User/_exec_funcs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Completion/User/_exec_funcs b/Completion/User/_exec_funcs new file mode 100644 index 000000000..2fd64b230 --- /dev/null +++ b/Completion/User/_exec_funcs @@ -0,0 +1,49 @@ +#autoload + +# This should be called from `_arguments' or otherwise the calling +# function has to set up an array named `line' that contains the +# name of the executable as its seconf element or it has to supply +# that name as an argument. +# One option is recognized: `-p' means that we are completing a pair +# of names separated by a slash. + +local cmd pair expl + +if [[ "$1" = -p ]]; then + pair=yes + shift +fi + +if (( $# )); then + cmd="$1" +elif [[ $#line -gt 1 ]]; then + cmd="$line[2]" +else + return 1 +fi + +if [[ -n "$cmd" ]]; then + if [[ "$cmd" = /* ]]; then + tmp="$cmd" + else + tmp="$PWD/$cmd" + fi + + if [[ "$tmp" != "$_es_command" ]]; then + _es_command="$tmp" + _es_funcs=( "${(@)${(@M)${(@f)$(nm $cmd)}:#[^ ]# [tT] ([^_]|_[^_])*}##* }" ) + fi + + if [[ -n "$pair" ]]; then + if compset -P '*/'; then + _description expl 'call arc to function' + else + _description expl 'call arc from function' + fi + else + _description expl function + fi + compadd -M 'r:|_=* r:|=*' - "$_es_funcs[@]" +else + return 1 +fi |