enhance makefile completion to support multiple files and gnumake

pull/1502/head
cornfeedhobo 2020-02-21 12:16:57 -06:00
parent 8007e78296
commit b70c02c4ae
No known key found for this signature in database
GPG Key ID: 724357093F994B26
1 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,24 @@
# Add completion for Makefile #!/usr/bin/env bash
# see http://stackoverflow.com/a/38415982/1472048 # Bash completion for Makefile
complete -W "\`grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' Makefile | sed 's/[^a-zA-Z0-9_-]*$//'\`" make
# Loosely adapted from http://stackoverflow.com/a/38415982/1472048
_makecomplete() {
# https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html
local files=( $(find . -maxdepth 1 -regextype posix-extended -regex '.*(GNU)?[Mm]akefile$' -printf '%f ') )
# collect all targets
local targets=''
for f in ${files[@]} ; do
for t in $(grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' $f | cut -d':' -f1) ; do
targets+="$t\n"
done
done
# flatten the array for completion
COMPREPLY=($(compgen -W "$(echo -e "$targets" | head -c -1 | sort -u)" -- ${COMP_WORDS[COMP_CWORD]}))
return 0
}
complete -o nospace -F _makecomplete make
complete -o nospace -F _makecomplete gnumake