| #!/usr/bin/env bash |
| # ---------------------------------------------------------------------------- |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # ---------------------------------------------------------------------------- |
| # |
| # groovyc Bash Completion |
| # ======================= |
| # |
| # Bash completion support for the `groovyc` command, |
| # generated by [picocli](http://picocli.info/) version 3.0.2. |
| # |
| # Installation |
| # ------------ |
| # |
| # 1. Source all completion scripts in your .bash_profile |
| # |
| # cd $GROOVY_HOME/bin |
| # for f in $(find . -name "*_completion"); do line=". $(pwd)/$f"; grep "$line" ~/.bash_profile || echo "$line" >> ~/.bash_profile; done |
| # |
| # 2. Open a new bash console, and type `groovyc [TAB][TAB]` |
| # |
| # Documentation |
| # ------------- |
| # The script is called by bash whenever [TAB] or [TAB][TAB] is pressed after |
| # 'groovyc (..)'. By reading entered command line parameters, |
| # it determines possible bash completions and writes them to the COMPREPLY variable. |
| # Bash then completes the user input if only one entry is listed in the variable or |
| # shows the options if more than one is listed in COMPREPLY. |
| # |
| # References |
| # ---------- |
| # [1] http://stackoverflow.com/a/12495480/1440785 |
| # [2] http://tiswww.case.edu/php/chet/bash/FAQ |
| # [3] https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html |
| # [4] https://stackoverflow.com/questions/17042057/bash-check-element-in-array-for-elements-in-another-array/17042655#17042655 |
| # [5] https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html#Programmable-Completion |
| # |
| |
| # Enable programmable completion facilities (see [3]) |
| shopt -s progcomp |
| |
| # ArrContains takes two arguments, both of which are the name of arrays. |
| # It creates a temporary hash from lArr1 and then checks if all elements of lArr2 |
| # are in the hashtable. |
| # |
| # Returns zero (no error) if all elements of the 2nd array are in the 1st array, |
| # otherwise returns 1 (error). |
| # |
| # Modified from [4] |
| function ArrContains() { |
| local lArr1 lArr2 |
| declare -A tmp |
| eval lArr1=("\"\${$1[@]}\"") |
| eval lArr2=("\"\${$2[@]}\"") |
| for i in "${lArr1[@]}";{ [ -n "$i" ] && ((++tmp[$i]));} |
| for i in "${lArr2[@]}";{ [ -n "$i" ] && [ -z "${tmp[$i]}" ] && return 1;} |
| return 0 |
| } |
| |
| # Bash completion entry point function. |
| # _complete_groovyc finds which commands and subcommands have been specified |
| # on the command line and delegates to the appropriate function |
| # to generate possible options and subcommands for the last specified subcommand. |
| function _complete_groovyc() { |
| |
| |
| # No subcommands were specified; generate completions for the top-level command. |
| _picocli_groovyc; return $?; |
| } |
| |
| # Generates completions for the options and subcommands of the `groovyc` command. |
| function _picocli_groovyc() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="" |
| FLAG_OPTS="-e --exception -pa --parameters -pr --enable-preview -j --jointCompilation --indy -h --help -v --version" |
| ARG_OPTS="-cp -classpath --classpath -sourcepath --sourcepath --temp --encoding -d -b --basescript -J -F --configscript" |
| |
| case ${CURR_WORD} in |
| -sourcepath|--sourcepath) |
| compopt -o filenames |
| COMPREPLY=( $( compgen -f -- "" ) ) # files |
| return $? |
| ;; |
| --temp) |
| compopt -o filenames |
| COMPREPLY=( $( compgen -f -- "" ) ) # files |
| return $? |
| ;; |
| -d) |
| compopt -o filenames |
| COMPREPLY=( $( compgen -f -- "" ) ) # files |
| return $? |
| ;; |
| *) |
| case ${PREV_WORD} in |
| -sourcepath|--sourcepath) |
| compopt -o filenames |
| COMPREPLY=( $( compgen -f -- $CURR_WORD ) ) # files |
| return $? |
| ;; |
| --temp) |
| compopt -o filenames |
| COMPREPLY=( $( compgen -f -- $CURR_WORD ) ) # files |
| return $? |
| ;; |
| -d) |
| compopt -o filenames |
| COMPREPLY=( $( compgen -f -- $CURR_WORD ) ) # files |
| return $? |
| ;; |
| esac |
| esac |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Define a completion specification (a compspec) for the |
| # `groovyc`, `groovyc.sh`, and `groovyc.bash` commands. |
| # Uses the bash `complete` builtin (see [5]) to specify that shell function |
| # `_complete_groovyc` is responsible for generating possible completions for the |
| # current word on the command line. |
| # The `-o default` option means that if the function generated no matches, the |
| # default Bash completions and the Readline default filename completions are performed. |
| complete -F _complete_groovyc -o default groovyc groovyc.sh groovyc.bash |