Ensures that the -E or -F option, when used, is the first option * i.e. grep -oE => grep -E -o Updates _bash-it-grep to invoke grep with just the provided arguments * This function was (and still is) unused, but decided this new functionality was actually more useful Introduces _bash-it-fgrep to invoke grep -F Removes type -P egrep from the _bash-it-*grep functions For usages that were already going to be modified, use -F if appropriate * Does not touch grep usages that may have benefited from -F, but were not otherwise considered for this PR Adds shellcheck header to modified .bash files that didn't already have it
37 lines
934 B
Bash
37 lines
934 B
Bash
# shellcheck shell=bash
|
|
|
|
# Bash completion for Makefile
|
|
# Loosely adapted from http://stackoverflow.com/a/38415982/1472048
|
|
|
|
_makecomplete() {
|
|
COMPREPLY=()
|
|
|
|
# https://www.gnu.org/software/make/manual/html_node/Makefile-Names.html
|
|
local files=()
|
|
for f in 'GNUmakefile' 'makefile' 'Makefile' ; do
|
|
[ -f "$f" ] && files+=("$f")
|
|
done
|
|
|
|
[ "${#files[@]}" -eq 0 ] && return 0
|
|
|
|
# collect all targets
|
|
local targets=()
|
|
for f in "${files[@]}" ; do
|
|
while IFS='' read -r line ; do
|
|
targets+=("$line")
|
|
done < <(grep -E -o '^[a-zA-Z0-9_-]+:([^=]|$)' "$f" | cut -d':' -f1)
|
|
done
|
|
|
|
[ "${#targets[@]}" -eq 0 ] && return 0
|
|
|
|
# use the targets for completion
|
|
while IFS='' read -r line ; do
|
|
COMPREPLY+=("$line")
|
|
done < <(compgen -W "$(tr ' ' '\n' <<<"${targets[@]}" | sort -u)" -- "${COMP_WORDS[COMP_CWORD]}")
|
|
|
|
return 0
|
|
}
|
|
|
|
complete -o nospace -F _makecomplete make
|
|
complete -o nospace -F _makecomplete gnumake
|