1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-02 10:01:11 +02:00

users/17856: rewrite _make to use _arguments.

No new option handling yet, but this should make it easier to add.
This commit is contained in:
Peter Stephenson 2013-07-11 11:14:38 +01:00
parent 669c070efe
commit 7e17ea8016
2 changed files with 39 additions and 10 deletions

View file

@ -1,3 +1,8 @@
2013-07-11 Peter Stephenson <p.stephenson@samsung.com>
* users/17856: Completion/Command/Unix/_make: rewrite to use
_arguments so as to make adding option handling easier.
2013-07-03 Peter Stephenson <p.stephenson@samsung.com>
* 31503: Doc/Zsh/contrib.yo, Functions/Misc/zmv: split words

View file

@ -148,7 +148,9 @@ _make-findBasedir () {
_make() {
local prev="$words[CURRENT-1]" file expl tmp is_gnu dir incl match
local -A TARGETS VARIABLES
local context state line
local -a option_specs
local -A TARGETS VARIABLES opt_args
local ret=1
_pick_variant -r is_gnu gnu=GNU unix -v -f
@ -156,21 +158,43 @@ _make() {
if [[ $is_gnu == gnu ]]
then
incl="(-|)include"
# TBD: update option_specs
option_specs=(
'-C[change directory first]:directory:->dir'
'-I[include directory for makefiles]:directory:->dir'
'-f[specify makefile]:makefile:->file'
'-o[specify file not to remake]:file not to remake:->file'
'-W[pretend file was modified]:file to treat as modified:->file'
)
else
# Basic make options only.
incl=.include
option_specs=(
'-C[change directory first]:directory:->dir'
'-I[include directory for makefiles]:directory:->dir'
'-f[specify makefile]:makefile:->file'
'-o[specify file not to remake]:file not to remake:->file'
'-W[pretend file was modified]:file to treat as modified:->file'
)
fi
if [[ "$prev" == -[CI] ]]
then
_arguments -s $option_specs \
'*:make target:->target' && ret=0
case $state in
(dir)
_files -W ${(q)$(_make-findBasedir ${words[1,CURRENT-1]})} -/ && ret=0
elif [[ "$prev" == -[foW] ]]
then
;;
(file)
_files -W ${(q)$(_make-findBasedir $words)} && ret=0
else
file="$words[(I)-f]"
if (( file ))
;;
(target)
file=($opt_args[(K)(-f|--file|--makefile)])
file=$file[1]
if [[ -n $file ]]
then
file=${~words[file+1]}
[[ $file == [^/]* ]] && file=${(q)$(_make-findBasedir $words)}/$file
[[ -r $file ]] || file=
else
@ -222,7 +246,7 @@ _make() {
compadd -S '=' -- ${(k)VARIABLES} && ret=0
done
fi
fi
esac
return ret
}