# Gentoo Linux Bash Shell Command Completion # # Copyright 1999-2013 Gentoo Authors # Distributed under the terms of the GNU General Public License, v2 or later # # java-config completion command # _javaconfig() { local cur prev curword numwords opts args arg spec flag sedcmd grepcmd local multiplepkgs pkgs execopts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" numwords=${#COMP_WORDS[*]} curword=${COMP_CWORD} opts="" args="" pkgs="" sedcmd="sed -r -e s/\[([^]]+)\].*/\1/" vmsedcmd="sed -r -e s/\[([^]]+)\]/\1/" grepcmd="egrep -o (--set-(system|user)-(classpath|vm)=)" multiplepkgs="" execopts="HtmlConverter JavaPluginControlPanel \ appletviewer awt_robot \ extcheck \ idlj \ j2sdk-config jar jarsigner \ java java-rmi.cgi java_vm javac javadoc javah javap jdb \ keytool kinit klist ktab \ native2ascii \ oldjava oldjavac oldjdb orbd \ policytool \ realpath rmic rmid rmiregistry \ serialver servertool \ tnameserv" if [[ "${cur}" == -* ]] || [ ${curword} -eq 1 ]; then case "${cur}" in --java) opts="--java --javac --java-version" ;; --j@(a@(r|va@(c|-version))|@(dk|re)-home)) opts="" ;; --list-available-@(packages|vms)) opts="" ;; --@(exec|set-@(user|system)-@(classpath|vm))) opts="${cur}=" ;; --set-@(user|system)-@(classpath|vm)=) if [[ "${cur}" == "--set-system-vm=" ]] || [[ "${cur}" == "--set-user-vm=" ]]; then flag="--list-available-vms" args=$(java-config --nocolor "${flag}" | cut --delimiter=' ' --fields=2 | ${vmsedcmd}) else flag="--list-available-packages" args=$(java-config --nocolor "${flag}" | ${sedcmd}) fi for arg in ${args}; do [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}" done COMPREPLY=($(compgen $nospace -W "${opts}")) return 0 ;; --exec=) COMPREPLY=($(compgen $nospace -W "${execopts}")) return 0 ;; *) if [[ "${cur}" == "--set-system-vm="* ]] || [[ "${cur}" == "--set-user-vm="* ]]; then args=$(java-config --nocolor --list-available-vms | cut --delimiter=' ' --fields=2 | ${vmsedcmd}) if [[ "${cur}" == "--set-system-vm="* ]]; then spec=${cur##--set-system-vm=} else spec=${cur##--set-user-vm=} fi for arg in ${args}; do if [[ "${arg:0:${#spec}}" == "${spec}" ]]; then [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}" fi done [[ "${opts}" == "${spec}" ]] && opts="" COMPREPLY=($(compgen -W "${opts}")) return 0 elif [[ "${cur}" == "--set-system-classpath="* ]] || [[ "${cur}" == "--set-user-classpath="* ]]; then args=$(java-config --nocolor --list-available-packages | ${sedcmd}) [[ $(echo "${cur}" | grep -c ",") -gt 0 ]] && multiplepkgs="true" if [[ "${cur}" == "--set-system-classpath="* ]]; then spec="${cur##--set-system-classpath=}" else spec="${cur##--set-user-classpath=}" fi if [[ -n "${multiplepkgs}" ]]; then pkgs="${spec%,*}" spec="${spec##*,}" fi if [[ -n "${multiplepkgs}" ]]; then for arg in ${args}; do if [[ "${spec}" ]]; then if [[ "${arg:0:${#spec}}" == "${spec}" ]] \ && [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]] then [[ -n "${opts}" ]] && opts="${opts} ${pkgs},${arg}" || opts="${pkgs},${arg}" fi else if [[ ! $(echo "${cur}" | egrep -o "(=|,)${arg},") ]]; then [[ -n "${opts}" ]] && opts="${opts} ${pkgs},${arg}" || opts="${pkgs},${arg}" fi fi done [[ "${opts}" == "${pkgs},${spec}" ]] && opts="" else for arg in ${args}; do if [[ "${spec}" ]] && [[ "${arg:0:${#spec}}" == "${spec}" ]]; then [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}" fi done [[ "${opts}" == "${spec}" ]] && opts="" fi COMPREPLY=($(compgen -W "${opts}")) return 0 elif [[ "${cur}" == "--exec="* ]]; then spec=${cur##--exec=} for arg in ${execopts}; do if [[ "${arg:0:${#spec}}" == "${spec}" ]]; then [[ -n "${opts}" ]] && opts="${opts} ${arg}" || opts="${arg}" fi done [[ "${opts}" == "${spec}" ]] && opts="" COMPREPLY=($(compgen -W "${opts}")) return 0 else opts="--classpath --clean-system-classpath --clean-user-classpath \ --exec \ --full-classpath \ --jar --java --javac --java-version --jdk-home --jre-home \ --list-available-packages --list-available-vms \ --nocolor \ --set-system-classpath --set-system-vm --set-user-classpath --set-user-vm" [[ "$prev" == "--nocolor" ]] && opts="${opts/--nocolor}" fi ;; esac elif [[ "$prev" == "--nocolor" ]] && [ ${curword} -eq 2 ] && [ $numwords -le 3 ]; then opts="--classpath --clean-system-classpath --clean-user-classpath \ --exec \ --full-classpath \ --jar --java --javac --java-version --jdk-home --jre-home \ --list-available-packages --list-available-vms \ --set-system-classpath --set-system-vm --set-user-classpath --set-user-vm" fi COMPREPLY=($(compgen $nospace -W "${opts}" -- ${cur})) return 0 } && complete $nospace -F _javaconfig java-config # vim: ft=sh:et:ts=4:sw=4:tw=80