426 lines
11 KiB
Plaintext
Raw Normal View History

2009-05-27 18:53:50 +02:00
# bash completion for java, javac and javadoc
# available path elements completion
have java && {
_java_path()
{
2009-10-04 19:42:50 +02:00
cur=${cur##*:}
_filedir '@(jar|zip)'
2009-05-27 18:53:50 +02:00
}
# exact classpath determination
_java_find_classpath()
{
2009-10-04 19:42:50 +02:00
local i
2009-05-27 18:53:50 +02:00
2009-10-04 19:42:50 +02:00
# search first in current options
for (( i=1; i < COMP_CWORD; i++ )); do
if [[ "${COMP_WORDS[i]}" == -@(cp|classpath) ]]; then
classpath=${COMP_WORDS[i+1]}
break
fi
done
2009-05-27 18:53:50 +02:00
2009-10-04 19:42:50 +02:00
# default to environment
[ -z "$classpath" ] && classpath=$CLASSPATH
2009-05-27 18:53:50 +02:00
2009-10-04 19:42:50 +02:00
# default to current directory
[ -z "$classpath" ] && classpath=.
2009-05-27 18:53:50 +02:00
}
# exact sourcepath determination
_java_find_sourcepath()
{
2009-10-04 19:42:50 +02:00
local i
# search first in current options
for (( i=1; i < COMP_CWORD; i++ )); do
if [[ "${COMP_WORDS[i]}" == -sourcepath ]]; then
sourcepath=${COMP_WORDS[i+1]}
break
fi
done
# default to classpath
if [ -z "$sourcepath" ]; then
_java_find_classpath
sourcepath=$classpath
fi
2009-05-27 18:53:50 +02:00
}
# available classes completion
_java_classes()
{
2009-10-04 19:42:50 +02:00
local classpath i
# find which classpath to use
_java_find_classpath
# convert package syntax to path syntax
cur=${cur//.//}
# parse each classpath element for classes
for i in ${classpath//:/ }; do
if [[ -r $i && "$i" == *.@(jar|zip) ]]; then
2009-10-04 19:42:50 +02:00
if type zipinfo &>/dev/null; then
COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \
"$i" "$cur*" 2>/dev/null | \
command grep '^[^$]*\.class$' ) )
2009-10-04 19:42:50 +02:00
else
COMPREPLY=( "${COMPREPLY[@]}" $( jar tf "$i" \
"$cur" | command grep '^[^$]*\.class$' ) )
2009-10-04 19:42:50 +02:00
fi
elif [ -d $i ]; then
i=${i%/}
# See Debian bug #496828
COMPREPLY=( "${COMPREPLY[@]}" $( find "$i" -type f \
-maxdepth 1 -path "$i/$cur*.class" 2>/dev/null | \
command grep -v "\\$" | sed -e "s|^$i/||" ) )
2009-10-04 19:42:50 +02:00
# FIXME: if we have foo.class and foo/, the completion
# returns "foo/"... how to give precedence to files
# over directories?
fi
done
# remove class extension
COMPREPLY=( ${COMPREPLY[@]%.class} )
# convert path syntax to package syntax
COMPREPLY=( ${COMPREPLY[@]//\//.} )
2009-05-27 18:53:50 +02:00
}
# available packages completion
_java_packages()
{
2009-10-04 19:42:50 +02:00
local sourcepath i
# find which sourcepath to use
_java_find_sourcepath
# convert package syntax to path syntax
cur=${cur//.//}
# parse each sourcepath element for packages
for i in ${sourcepath//:/ }; do
if [ -d $i ]; then
COMPREPLY=( "${COMPREPLY[@]}" $( command ls -F -d \
$i/$cur* 2>/dev/null | sed -e 's|^'$i'/||' ) )
fi
done
# keep only packages
COMPREPLY=( $( tr " " "\n" <<<"${COMPREPLY[@]}" | command grep "/$" ) )
2009-10-04 19:42:50 +02:00
# remove packages extension
COMPREPLY=( ${COMPREPLY[@]%/} )
# convert path syntax to package syntax
cur=${COMPREPLY[@]//\//.}
2009-05-27 18:53:50 +02:00
}
# java completion
#
_java()
{
2009-10-04 19:42:50 +02:00
local cur prev i
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
for ((i=1; i < $COMP_CWORD; i++)); do
case ${COMP_WORDS[$i]} in
-cp|-classpath)
((i++)) # skip the classpath string.
;;
-*)
# this is an option, not a class/jarfile name.
;;
*)
# once we've seen a class, just do filename completion
_filedir
return 0
;;
esac
done
case $prev in
-cp|-classpath)
2009-10-04 19:42:50 +02:00
_java_path
return 0
;;
esac
if [[ "$cur" == -* ]]; then
# relevant options completion
COMPREPLY=( $( compgen -W '-client -hotspot -server -classic \
-classpath -D -verbose -verbose:class \
2009-10-04 19:42:50 +02:00
-verbose:gc -version:jni -version \
-showversion -help -X -jar \
-enableassertions -disableassertions \
-enablesystemassertions -disablesystemassertions ' -- "$cur" ) )
2009-10-04 19:42:50 +02:00
else
if [[ "$prev" == -jar ]]; then
# jar file completion
_filedir jar
else
# classes completion
_java_classes
fi
fi
2009-05-27 18:53:50 +02:00
}
complete -F _java -o filenames java
2009-05-27 18:53:50 +02:00
}
have javadoc &&
_javadoc()
{
2009-10-04 19:42:50 +02:00
COMPREPLY=()
local cur prev classpath
2009-10-04 19:42:50 +02:00
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case $prev in
-overview|-helpfile|-stylesheetfile)
2009-10-04 19:42:50 +02:00
_filedir
return 0
;;
-d)
_filedir -d
return 0
;;
-classpath|-bootclasspath|-docletpath|-sourcepath|-extdirs)
2009-10-04 19:42:50 +02:00
_java_path
return 0
;;
esac
if [[ "$cur" == -* ]]; then
# relevant options completion
COMPREPLY=( $( compgen -W '-overview -public -protected \
-package -private -help -doclet -docletpath \
-sourcepath -classpath -exclude -subpackages \
-breakiterator -bootclasspath -source -extdirs \
-verbose -locale -encoding -J -d -use -version \
-author -docfilessubdirs -splitindex \
-windowtitle -doctitle -header -footer -bottom \
-link -linkoffline -excludedocfilessubdir \
-group -nocomment -nodeprecated -noqualifier \
-nosince -nodeprecatedlist -notree -noindex \
-nohelp -nonavbar -quiet -serialwarn -tag \
-taglet -tagletpath -charset -helpfile \
-linksource -stylesheetfile -docencoding' -- "$cur" ) )
else
# source files completion
_filedir java
# packages completion
_java_packages
fi
2009-05-27 18:53:50 +02:00
} &&
complete -F _javadoc -o filenames javadoc
2009-05-27 18:53:50 +02:00
have javac &&
_javac()
{
2009-10-04 19:42:50 +02:00
COMPREPLY=()
local cur prev
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
case $prev in
-d)
_filedir -d
return 0
;;
-classpath|-bootclasspath|-sourcepath|-extdirs)
2009-10-04 19:42:50 +02:00
_java_path
return 0
;;
esac
if [[ "$cur" == -* ]]; then
# relevant options completion
COMPREPLY=( $( compgen -W '-g -g:none -g:lines -g:vars \
-g:source -O -nowarn -verbose -deprecation -classpath \
-sourcepath -bootclasspath -extdirs -d -encoding -source \
2009-10-04 19:42:50 +02:00
-target -help' -- "$cur" ) )
else
# source files completion
_filedir java
fi
2009-05-27 18:53:50 +02:00
} &&
complete -F _javac -o filenames javac
have pack200 &&
_pack200()
{
COMPREPLY=()
local cur=`_get_cword` prev=`_get_pword`
case $prev in
-S|--segment-limit|-P|--pass-file|-C|--class-attribute|\
-F|--field-attribute|-M|--method-attribute|-D|--code-attribute|\
'-?'|-h|--help|-V|--version|-J)
return 0
;;
-E|--effort)
COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$cur" ) )
return 0
;;
-H|--deflate-hint)
COMPREPLY=( $( compgen -W 'true false keep' -- "$cur" ) )
return 0
;;
-m|--modification-time)
COMPREPLY=( $( compgen -W 'latest keep' -- "$cur" ) )
return 0
;;
-U|--unknown-attribute)
COMPREPLY=( $( compgen -W 'error strip pass' -- "$cur" ) )
return 0
;;
-f|--config-file)
_filedir properties
return 0
;;
-l|--log-file)
COMPREPLY=( $( compgen -W '-' -- "$cur" ) )
_filedir log
return 0
;;
esac
# Check if a pack or a jar was already given.
local i pack=false jar=false
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
case ${COMP_WORDS[i]} in
*.pack|*.pack.gz) pack=true ;;
*.jar) jar=true ;;
esac
done
if ! $pack ; then
if [[ "$cur" == -* ]] ; then
COMPREPLY=( $( compgen -W '--no-gzip --gzip --strip-debug \
--no-keep-file-order --segment-limit= --effort= \
--deflate-hint= --modification-time= --pass-file= \
--unknown-attribute= --class-attribute= --field-attribute= \
--method-attribute= --code-attribute= --config-file= \
--verbose --quiet --log-file= --help --version -J' -- "$cur" ) )
[[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \
type compopt &>/dev/null && compopt -o nospace
else
_filedir 'pack?(.gz)'
fi
elif ! $jar ; then
_filedir jar
fi
} &&
complete -F _pack200 pack200
have unpack200 &&
_unpack200()
{
COMPREPLY=()
local cur=`_get_cword` prev=`_get_pword`
case $prev in
'-?'|-h|--help|-V|--version|-J)
return 0
;;
-H|--deflate-hint)
COMPREPLY=( $( compgen -W 'true false keep' -- "$cur" ) )
return 0
;;
-l|--log-file)
COMPREPLY=( $( compgen -W '-' -- "$cur" ) )
_filedir log
return 0
;;
esac
# Check if a pack or a jar was already given.
local i pack=false jar=false
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
case ${COMP_WORDS[i]} in
*.pack|*.pack.gz) pack=true ;;
*.jar) jar=true ;;
esac
done
if ! $pack ; then
if [[ "$cur" == -* ]] ; then
COMPREPLY=( $( compgen -W '--deflate-hint= --remove-pack-file \
--verbose --quiet --log-file= --help --version' -- "$cur" ) )
[[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == *= ]] && \
type compopt &>/dev/null && compopt -o nospace
else
_filedir 'pack?(.gz)'
fi
elif ! $jar ; then
_filedir jar
fi
} &&
complete -F _unpack200 unpack200
have jarsigner &&
_jarsigner()
{
COMPREPLY=()
local cur=`_get_cword` prev=`_get_pword`
case $prev in
-keystore)
COMPREPLY=( $( compgen -W 'NONE' -- "$cur" ) )
_filedir '@(jks|ks|p12|pfx)'
return 0
;;
-storepass|-keypass|-sigfile|-digestalg|-sigalg|-tsacert|-altsigner|\
-altsignerpath|-providerName|-providerClass|-providerArg)
return 0
;;
-storetype)
COMPREPLY=( $( compgen -W 'JKS PKCS11 PKCS12' -- "$cur" ) )
return 0
;;
-signedjar)
_filedir jar
return 0
;;
-tsa)
_filedir
return 0
;;
esac
# Check if a jar was already given.
local i jar=false
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )) ; do
if [[ "${COMP_WORDS[i]}" == *.jar && \
"${COMP_WORDS[i-1]}" != -signedjar ]] ; then
jar=true
break
fi
done
if ! $jar ; then
if [[ "$cur" == -* ]] ; then
# Documented as "should not be used": -internalsf, -sectionsonly
COMPREPLY=( $( compgen -W '-keystore -storepass -storetype \
-keypass -sigfile -signedjar -digestalg -sigalg -verify \
-verbose -certs -tsa -tsacert -altsigner -altsignerpath \
-protected -providerName -providerClass -providerArg' \
-- "$cur" ) )
fi
_filedir jar
fi
} &&
complete -F _jarsigner -o filenames jarsigner
# Local variables:
# mode: shell-script
2009-10-04 19:42:50 +02:00
# sh-basic-offset: 4
# sh-indent-comment: t
2009-10-04 19:42:50 +02:00
# indent-tabs-mode: nil
# End:
2009-10-04 19:42:50 +02:00
# ex: ts=4 sw=4 et filetype=sh