diff options
Diffstat (limited to 'bash/bashrc.d')
-rw-r--r-- | bash/bashrc.d/make.bash | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/bash/bashrc.d/make.bash b/bash/bashrc.d/make.bash new file mode 100644 index 00000000..d6f4eafa --- /dev/null +++ b/bash/bashrc.d/make.bash @@ -0,0 +1,37 @@ +# Bail if no make(1) +if ! hash make 2>/dev/null ; then + return +fi + +# Completion setup for Make, completing targets +# +# Note that because of the +_make() { + local word=${COMP_WORDS[COMP_CWORD]} + + # Quietly bail if no legible Makefile + if [[ ! -r Makefile ]] ; then + return 1 + fi + + # Build a list of targets by parsing the Makefile + local -a targets tokens + local target line + while read -r line ; do + if [[ $line == *:* ]] ; then + target=$line + target=${target%%:*} + target=${target% } + if [[ $target != *[^[:alnum:][:space:]_-]* ]] ; then + IFS=' ' read -a tokens \ + < <(printf '%s\n' "$target") + targets=("${targets[@]}" "${tokens[@]}") + fi + fi + done < Makefile + + # Complete with matching targets + COMPREPLY=( $(compgen -W "${targets[*]}" -- "$word") ) +} +complete -F _make -o default make + |