about summary refs log tree commit diff
path: root/Completion/User/_exec_funcs
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-08-23 10:07:44 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-08-23 10:07:44 +0000
commitc21b91b916e23f202a0ae3b2a7aafe4e595e7b5c (patch)
tree30c6fdd6dadba05d7b566ae99ca51ae980a2514e /Completion/User/_exec_funcs
parent0066a6a007cc06e959d1d040f80d1ea0e72076c2 (diff)
downloadzsh-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_funcs49
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