#!/usr/bin/env bash _waf() { local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" # don't complet = _init_completion -n = || return # TODO: generate for waf help opts="-h" opts+=" -j " opts+=" -v " opts+=" AP_Periph" opts+=" copter" opts+=" heli" opts+=" plane" opts+=" rover" opts+=" sub" opts+=" antennatracker" opts+=" tools" opts+=" examples" opts+=" bootloader" opts+=" iofirmware" opts+=" list" opts+=" all" opts+=" build" opts+=" configure" opts+=" clean" opts+=" distclean" opts+=" submodule_force_clean" opts+=" submodulesync" # Prevent word reuse TODO: add -vvv case lim=$((COMP_CWORD - 1)) for i in $( seq 0 $lim ) do if [[ $opts == *"${COMP_WORDS[i]}"* ]]; then opts=${opts//${COMP_WORDS[i]}/} opts=${opts//--${COMP_WORDS[i]}/} fi done case $prev in --board) opts=$(./waf list_boards | sed -e '$d') COMPREPLY=($(compgen -W "${opts}" -- ${cur})) return 0 ;; esac case $cur in --targets=*) cur=${cur#*=} if [ -z "$_waf_comp_targets" ]; then # list target without color, remove Lua embedding, remove empty and space only line, remove objs/*, remove path for lua binding, remove trailing spaces, change line return for space _waf_comp_targets=$(./waf list -c no | sed -e '/^Embedding/d' -e '/^ *$/d' -e '/objs\//d' -e '$d' -e '/^\//d' | tr -d " " | tr '\n' ' ') fi opts=$_waf_comp_targets COMPREPLY=($(compgen -W "${opts}" -- ${cur})) return 0 ;; esac COMPREPLY=( $(compgen -W '$(_parse_help "$1")' -- "$cur") $(compgen -W "${opts}" -- ${cur}) ) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace } complete -F _waf waf