diff options
Diffstat (limited to 'completions/java')
-rw-r--r-- | completions/java | 327 |
1 files changed, 56 insertions, 271 deletions
diff --git a/completions/java b/completions/java index 460ae285..e02f7369 100644 --- a/completions/java +++ b/completions/java @@ -1,23 +1,21 @@ -# bash completion for java, javac and javadoc +# bash completion for java, javac and javadoc -*- shell-script -*- # available path elements completion -have java || have javac || have javadoc && _java_path() { cur=${cur##*:} _filedir '@(jar|zip)' } -have java || have javadoc && { # exact classpath determination _java_find_classpath() { local i # 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]} + for (( i=1; i < cword; i++ )); do + if [[ "${words[i]}" == -@(cp|classpath) ]]; then + classpath=${words[i+1]} break fi done @@ -35,15 +33,16 @@ _java_find_sourcepath() 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]} + for (( i=1; i < cword; i++ )); do + if [[ "${words[i]}" == -sourcepath ]]; then + sourcepath=${words[i+1]} break fi done # default to classpath if [ -z "$sourcepath" ]; then + local classpath _java_find_classpath sourcepath=$classpath fi @@ -63,20 +62,20 @@ _java_classes() for i in ${classpath//:/ }; do if [[ "$i" == *.@(jar|zip) && -r $i ]]; then if type zipinfo &>/dev/null; then - COMPREPLY=( "${COMPREPLY[@]}" $( zipinfo -1 \ - "$i" "$cur*" 2>/dev/null | \ + COMPREPLY+=( $( zipinfo -1 "$i" "$cur*" 2>/dev/null | \ command grep '^[^$]*\.class$' ) ) else - COMPREPLY=( "${COMPREPLY[@]}" $( jar tf "$i" \ - "$cur" | command grep '^[^$]*\.class$' ) ) + COMPREPLY+=( $( jar tf "$i" "$cur" | \ + command grep '^[^$]*\.class$' ) ) fi elif [ -d $i ]; then - # Intentionally looking for *.class only in $i (not subdirs), - # see Debian bug #496828. - COMPREPLY=( "${COMPREPLY[@]}" - $( command ls $i/$cur*.class 2>/dev/null | \ - sed -ne '/\$/d' -e "s|^$i//*||p" ) ) + COMPREPLY+=( + $( compgen -d -- "$i/$cur" | sed -e "s|^$i/\(.*\)|\1.|" ) + $( compgen -f -X '!*.class' -- "$i/$cur" | \ + sed -e '/\$/d' -e "s|^$i/||" ) + ) + [[ $COMPREPLY == *.class ]] || compopt -o nospace # FIXME: if we have foo.class and foo/, the completion # returns "foo/"... how to give precedence to files @@ -103,8 +102,8 @@ _java_packages() # 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'/||' ) ) + COMPREPLY+=( $( command ls -F -d $i/$cur* 2>/dev/null | \ + sed -e 's|^'$i'/||' ) ) fi done # keep only packages @@ -114,17 +113,15 @@ _java_packages() # convert path syntax to package syntax cur=${COMPREPLY[@]//\//.} } -} # java completion # -have java && _java() { - local cur prev words cword i + local cur prev words cword + _init_completion -n : || return - COMPREPLY=() - _get_comp_words_by_ref -n : cur prev words cword + local i for ((i=1; i < $cword; i++)); do case ${words[$i]} in @@ -214,11 +211,9 @@ _java() esac if [[ "$cur" == -* ]]; then - # standard options - COMPREPLY=( $( compgen -W '-client -server -agentlib: -agentpath: - -classpath -D -d32 -d64 -enableassertions -disableassertions - -enablesystemassertions -disablesystemassertions -jar -javaagent: - -verbose -verbose -version -showversion -help -X' -- "$cur" ) ) + COMPREPLY=( $( compgen -W '$( _parse_help "$1" -help )' -- "$cur" ) ) + [[ $cur == -X* ]] && \ + COMPREPLY+=( $( compgen -W '$( _parse_help "$1" -X )' -- "$cur" ) ) else if [[ "$prev" == -jar ]]; then # jar file completion @@ -229,20 +224,16 @@ _java() fi fi - [[ ${#COMPREPLY[@]} -eq 1 && ${COMPREPLY[0]} == -*[:=] ]] && \ - type compopt &>/dev/null && compopt -o nospace + [[ $COMPREPLY == -*[:=] ]] && compopt -o nospace __ltrim_colon_completions "$cur" } && complete -F _java java -have javadoc && _javadoc() { - COMPREPLY=() - local cur prev classpath - - _get_comp_words_by_ref cur prev + local cur prev words cword + _init_completion || return case $prev in -overview|-helpfile) @@ -254,7 +245,6 @@ _javadoc() return 0 ;; -d|-link|-linkoffline) - # TODO: -linkoffline takes two arguments _filedir -d return 0 ;; @@ -264,21 +254,14 @@ _javadoc() ;; esac + # -linkoffline takes two arguments + if [[ $cword -gt 2 && ${words[$cword-2]} == -linkoffline ]]; then + _filedir -d + return + fi + 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" ) ) + COMPREPLY=( $( compgen -W '$( _parse_help "$1" -help )' -- "$cur" ) ) else # source files completion _filedir java @@ -288,13 +271,10 @@ _javadoc() } && complete -F _javadoc javadoc -have javac && _javac() { - COMPREPLY=() - local cur prev - - _get_comp_words_by_ref cur prev + local cur prev words cword + _init_completion -n : || return case $prev in -d) @@ -307,227 +287,32 @@ _javac() ;; esac + if [[ $cur == -+([a-zA-z0-9-_]):* ]]; then + # Parse required options from -foo:{bar,quux,baz} + local helpopt=-help + [[ $cur == -X* ]] && helpopt=-X + # For some reason there may be -g:none AND -g:{lines,source,vars}; + # convert the none case to the curly brace format so it parses like + # the others. + local opts=$( "$1" $helpopt 2>&1 | sed -e 's/-g:none/-g:{none}/' -ne \ + "s/^[[:space:]]*${cur%%:*}:{\([^}]\{1,\}\)}.*/\1/p" ) + COMPREPLY=( $( compgen -W "${opts//,/ }" -- "${cur#*:}" ) ) + return + fi + 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 \ - -target -help' -- "$cur" ) ) + COMPREPLY=( $( compgen -W '$( _parse_help "$1" -help )' -- "$cur" ) ) + [[ $cur == -X* ]] && \ + COMPREPLY+=( $( compgen -W '$( _parse_help "$1" -X )' -- "$cur" ) ) else # source files completion _filedir java fi -} && -complete -F _javac javac - -have pack200 && -_pack200() -{ - COMPREPLY=() - local cur prev - _get_comp_words_by_ref cur prev - - 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 - ;; - -r|--repack) - _filedir jar - 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 \ - --repack' -- "$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 prev - _get_comp_words_by_ref cur prev + [[ $COMPREPLY == -*[:=] ]] && compopt -o nospace - 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 prev - _get_comp_words_by_ref cur prev - - 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 + __ltrim_colon_completions "$cur" } && -complete -F _jarsigner jarsigner - -have javaws && -_javaws() -{ - COMPREPLY=() - local cur prev - _get_comp_words_by_ref cur prev - - case $prev in - -help|-license|-about|-viewer|-arg|-param|-property|-update|-umask) - return 0 - ;; - -basedir|-codebase) - _filedir -d - return 0 - ;; - -uninstall|-import) - _filedir jnlp - return 0 - ;; - esac - - if [[ $cur == -* ]]; then - COMPREPLY=( $( compgen -W "$( _parse_help "$1" -help ) " -- "$cur" ) ) - return 0 - fi +complete -F _javac javac - _filedir jnlp -} && -complete -F _javaws javaws - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: # ex: ts=4 sw=4 et filetype=sh |