diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Unix/Type/.distfiles | 1 | ||||
-rw-r--r-- | Completion/Unix/Type/_java_class | 15 |
2 files changed, 16 insertions, 0 deletions
diff --git a/Completion/Unix/Type/.distfiles b/Completion/Unix/Type/.distfiles index 52d55f0ca..b57c067a6 100644 --- a/Completion/Unix/Type/.distfiles +++ b/Completion/Unix/Type/.distfiles @@ -9,4 +9,5 @@ _files _pdf _pspdf _users _groups _perl_basepods _signals _users_on _hosts _perl_builtin_funcs _tar_archive _time_zone _file_systems _net_interfaces _terminals _locales +_java_class ' 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 |