#!/usr/bin/env bash _waf() { local cur prev opts COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" # TODO: generate for waf help opts="--help -h" opts+=" -j --jobs" opts+=" -v --verbose" opts+=" --debug" opts+=" --bootloader" opts+=" --default-parameters" opts+=" --enable-sfml" opts+=" --enable-sfml-audio" opts+=" --sitl-osd" opts+=" --sitl-rgbled" opts+=" --build-dates" opts+=" --sitl-flash-storage" opts+=" --upload" opts+=" --board" 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" # 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) # get options between board and debug, remove everything before "are", remove everything after "--debug", remove final dot, remove all comma opts=$(./waf --help | sed -n '/--board=/,/--debug/p' | sed -e 's/.*are //g' -e 's/\(--debug.*\)//g' -e 's/[.]//g' -e 's/[,]//g') COMPREPLY=($(compgen -W "${opts}" -- ${cur})) return 0 ;; esac COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) } complete -F _waf waf