| #!/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. |
| # ---------------------------------------------------------------------------- |
| # |
| # grape Bash Completion |
| # ======================= |
| # |
| # Bash completion support for the `grape` 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 `grape [TAB][TAB]` |
| # |
| # Documentation |
| # ------------- |
| # The script is called by bash whenever [TAB] or [TAB][TAB] is pressed after |
| # 'grape (..)'. 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_grape 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_grape() { |
| CMDS0=(install) |
| CMDS1=(uninstall) |
| CMDS2=(list) |
| CMDS3=(resolve) |
| CMDS4=(help) |
| |
| ArrContains COMP_WORDS CMDS4 && { _picocli_grape_help; return $?; } |
| ArrContains COMP_WORDS CMDS3 && { _picocli_grape_resolve; return $?; } |
| ArrContains COMP_WORDS CMDS2 && { _picocli_grape_list; return $?; } |
| ArrContains COMP_WORDS CMDS1 && { _picocli_grape_uninstall; return $?; } |
| ArrContains COMP_WORDS CMDS0 && { _picocli_grape_install; return $?; } |
| |
| # No subcommands were specified; generate completions for the top-level command. |
| _picocli_grape; return $?; |
| } |
| |
| # Generates completions for the options and subcommands of the `grape` command. |
| function _picocli_grape() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="install uninstall list resolve help" |
| FLAG_OPTS="-q --quiet -w --warn -i --info -V --verbose -d --debug -h --help -v --version" |
| ARG_OPTS="-D --define -r --resolver" |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Generates completions for the options and subcommands of the `install` subcommand. |
| function _picocli_grape_install() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="" |
| FLAG_OPTS="-h --help -v --version" |
| ARG_OPTS="" |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Generates completions for the options and subcommands of the `uninstall` subcommand. |
| function _picocli_grape_uninstall() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="" |
| FLAG_OPTS="-h --help -v --version" |
| ARG_OPTS="" |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Generates completions for the options and subcommands of the `list` subcommand. |
| function _picocli_grape_list() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="" |
| FLAG_OPTS="-h --help -v --version" |
| ARG_OPTS="" |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Generates completions for the options and subcommands of the `resolve` subcommand. |
| function _picocli_grape_resolve() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="" |
| FLAG_OPTS="-a --ant -d --dos -s --shell -i --ivy -h --help -v --version" |
| ARG_OPTS="" |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Generates completions for the options and subcommands of the `help` subcommand. |
| function _picocli_grape_help() { |
| # Get completion data |
| CURR_WORD=${COMP_WORDS[COMP_CWORD]} |
| PREV_WORD=${COMP_WORDS[COMP_CWORD-1]} |
| |
| COMMANDS="" |
| FLAG_OPTS="-h --help" |
| ARG_OPTS="" |
| |
| COMPREPLY=( $(compgen -W "${FLAG_OPTS} ${ARG_OPTS} ${COMMANDS}" -- ${CURR_WORD}) ) |
| } |
| |
| # Define a completion specification (a compspec) for the |
| # `grape`, `grape.sh`, and `grape.bash` commands. |
| # Uses the bash `complete` builtin (see [5]) to specify that shell function |
| # `_complete_grape` 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_grape -o default grape grape.sh grape.bash |