github.com/maruel/nin@v0.0.0-20220112143044-f35891e3ce7e/misc/bash-completion (about) 1 # Copyright 2011 Google Inc. All Rights Reserved. 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 # Add the following to your .bashrc to tab-complete ninja targets 16 # . path/to/ninja/misc/bash-completion 17 18 _ninja_target() { 19 local cur prev targets dir line targets_command OPTIND 20 21 # When available, use bash_completion to: 22 # 1) Complete words when the cursor is in the middle of the word 23 # 2) Complete paths with files or directories, as appropriate 24 if _get_comp_words_by_ref cur prev &>/dev/null ; then 25 case $prev in 26 -f) 27 _filedir 28 return 0 29 ;; 30 -C) 31 _filedir -d 32 return 0 33 ;; 34 esac 35 else 36 cur="${COMP_WORDS[COMP_CWORD]}" 37 fi 38 39 if [[ "$cur" == "--"* ]]; then 40 # there is currently only one argument that takes -- 41 COMPREPLY=($(compgen -P '--' -W 'version' -- "${cur:2}")) 42 else 43 dir="." 44 line=$(echo ${COMP_LINE} | cut -d" " -f 2-) 45 # filter out all non relevant arguments but keep C for dirs 46 while getopts :C:f:j:l:k:nvd:t: opt $line; do 47 case $opt in 48 # eval for tilde expansion 49 C) eval dir="$OPTARG" ;; 50 esac 51 done; 52 targets_command="eval ninja -C \"${dir}\" -t targets all 2>/dev/null | cut -d: -f1" 53 COMPREPLY=($(compgen -W '`${targets_command}`' -- "$cur")) 54 fi 55 return 56 } 57 complete -F _ninja_target ninja