# Copyright 2011 Google Inc. All Rights Reserved. # # Licensed 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. # Add the following to your .bashrc to tab-complete ninja targets # . path/to/ninja/misc/bash-completion _ninja_target() { local cur prev targets dir line targets_command OPTIND # When available, use bash_completion to: # 1) Complete words when the cursor is in the middle of the word # 2) Complete paths with files or directories, as appropriate if _get_comp_words_by_ref cur prev &>/dev/null ; then case $prev in -f) _filedir return 0 ;; -C) _filedir -d return 0 ;; esac else cur="${COMP_WORDS[COMP_CWORD]}" fi if [[ "$cur" == "--"* ]]; then # there is currently only one argument that takes -- COMPREPLY=($(compgen -P '--' -W 'version' -- "${cur:2}")) else dir="." line=$(echo ${COMP_LINE} | cut -d" " -f 2-) # filter out all non relevant arguments but keep C for dirs while getopts :C:f:j:l:k:nvd:t: opt $line; do case $opt in # eval for tilde expansion C) eval dir="$OPTARG" ;; esac done; targets_command="eval ninja -C \"${dir}\" -t targets all 2>/dev/null | cut -d: -f1" COMPREPLY=($(compgen -W '`${targets_command}`' -- "$cur")) fi return } complete -F _ninja_target ninja