about summary refs log tree commit diff
path: root/Completion/Unix/Type/_java_class
diff options
context:
space:
mode:
authorFelix Rosencrantz <f_rosencrantz@users.sourceforge.net>2002-04-10 05:24:29 +0000
committerFelix Rosencrantz <f_rosencrantz@users.sourceforge.net>2002-04-10 05:24:29 +0000
commit21139de01d669592a22fd2c3eec5f6e938fe3aa2 (patch)
treeab92849a0dc821d9736e23a1be0ad6817023360d /Completion/Unix/Type/_java_class
parentc5ebd0fad00a591c61c623f9355579fa9b247b96 (diff)
downloadzsh-21139de01d669592a22fd2c3eec5f6e938fe3aa2.tar.gz
zsh-21139de01d669592a22fd2c3eec5f6e938fe3aa2.tar.xz
zsh-21139de01d669592a22fd2c3eec5f6e938fe3aa2.zip
New _java_class to find classes on the classpath.
Diffstat (limited to 'Completion/Unix/Type/_java_class')
-rw-r--r--Completion/Unix/Type/_java_class15
1 files changed, 15 insertions, 0 deletions
diff --git a/Completion/Unix/Type/_java_class b/Completion/Unix/Type/_java_class
new file mode 100644
index 000000000..ffbcfe735
--- /dev/null
+++ b/Completion/Unix/Type/_java_class
@@ -0,0 +1,15 @@
+local classpath
+#Should probably add some sort of cache.
+#First use -classpath/-cp, then CLASSPATH, then assume .
+classpath=${opt_args[-classpath]:-${opt_args[-cp]:-${CLASSPATH:-.}}}
+local c i
+#Should we call _multipart insteads of compadd
+for i in ${(z)classpath//:/ }; do
+	if [ -f $i ] && [[ "$i" == *.(jar|zip|war|ear) ]]; then
+		c=(${${${(M)$(_call_program jar_classes jar -tf $i)##*.class}%%.class}:gs#/#.#})
+		compadd -M 'r:|.=* r:|=*' -- $c
+	elif [ -d $i ]; then
+		c=(**/*.class(.:r:s/.class//:gs#/#.#))
+		compadd -M 'r:|.=* r:|=*' -- $c
+	fi
+done