diff options
Diffstat (limited to 'completions/java-config')
-rw-r--r-- | completions/java-config | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/completions/java-config b/completions/java-config new file mode 100644 index 0000000..42bf11e --- /dev/null +++ b/completions/java-config @@ -0,0 +1,158 @@ +# Gentoo Linux Bash Shell Command Completion +# +# Copyright 1999-2013 Gentoo Foundation +# 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 |