Makefile variable autocompletion in bash -
let's makefile like:
dir :=# foobar: ls ${dir} when type
mak[tab] f[tab] it gives correctly
make foobar but
make foobar d[tab] doesn't magic
make foobar dir= so question is: there way autocomplete makefile variables (aside targets) in bash?
this answer far complete. grep variables in makefile use make -p print makefile database:
# gnu make 3.81 # copyright (c) 2006 free software foundation, inc. # free software; see source copying conditions. # there no warranty; not merchantability or fitness # particular purpose. # program built x86_64-pc-linux-gnu # make data base, printed on mon oct 13 13:36:12 2014 # variables # automatic <d = $(patsubst %/,%,$(dir $<)) # automatic ?f = $(notdir $?) # environment desktop_session = kde-plasma # ... # makefile (from `makefile', line 1) dir := we looking lines starting # makefile (from 'makefile', line xy) , extract name of following variable:
$ make -p | sed -n '/# makefile (from/ {n; p;}' makefile_list := makefile dir := in next step remove variable name (everything after :=):
$ make -p makefile | sed -n '/# makefile (from/ {n; s/^\([^.#:= ]\+\) *:\?=.*$/\1/p;}' makefile_list dir the following lines demonstrate how done:
_make_variables() { # current completion local cur=${comp_words[comp_cword]} # list of possible makefile variables local var=$(make -p makefile | sed -n '/# makefile (from/ {n; s/^\([^.#:= ]\+\) *:\?=.*$/\1=/p;}') # don't add space after completion compopt -o nospace # find possible matches compreply=( $(compgen -w "${var}" -- ${cur}) ) } # use _make_variables complete make arguments complete -f _make_variables make now make d[tab] results in make dir=.
sadly loose file , target completion approach. useful remove more variables (e.g. makefile_list) completion output.
maybe worth fill wish/bug report against bash-completion project add feature.
Comments
Post a Comment