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

44896: use opt_args to find base directory and use it for $(CURDIR)

This commit is contained in:
Oliver Kiddle 2019-11-24 22:56:21 +01:00
parent 87db974a84
commit 5df672b9d7
2 changed files with 13 additions and 33 deletions

View file

@ -1,3 +1,8 @@
2019-11-24 Oliver Kiddle <okiddle@yahoo.co.uk>
* 44896: Completion/Unix/Command/_make: use opt_args to find
base directory and use it for $(CURDIR)
2019-11-19 Daniel Shahaf <d.s@daniel.shahaf.name>
* users/24451: Src/compat.c: zgetcwd: Add a guard against

View file

@ -118,35 +118,9 @@ _make-parseMakefile () {
done
}
_make-findBasedir () {
local file index basedir
basedir=$PWD
for (( index=0; index < $#@; index++ ))
do
if [[ $@[index] == -C ]]
then
file=${~@[index+1]} 2>/dev/null
if [[ -z $file ]]
then
# make returns with an error if an empty arg is given
# even if the concatenated path is a valid directory
return
elif [[ $file == /* ]]
then
# Absolute path, replace base directory
basedir=$file
else
# Relative, concatenate path
basedir=$basedir/$file
fi
fi
done
print -- $basedir
}
_make() {
local prev="$words[CURRENT-1]" file expl tmp is_gnu incl match
local prev="$words[CURRENT-1]" file expl tmp is_gnu incl match basedir
local context state state_descr line
local -a option_specs
local -A VARIABLES VAR_ARGS opt_args
@ -214,15 +188,18 @@ _make() {
_arguments -s $option_specs \
'*:make target:->target' && ret=0
basedir=${(Q)~opt_args[-C]:-${opt_args[--directory]}}
VAR_ARGS[CURDIR]="${basedir:=$PWD}"
case $state in
(dir)
_description directories expl "$state_descr"
_files "$expl[@]" -W ${(q)$(_make-findBasedir ${words[1,CURRENT-1]})} -/ && ret=0
_files "$expl[@]" -W $basedir -/ && ret=0
;;
(file)
_description files expl "$state_descr"
_files "$expl[@]" -W ${(q)$(_make-findBasedir $words)} && ret=0
_files "$expl[@]" -W $basedir && ret=0
;;
(debug)
@ -239,11 +216,9 @@ _make() {
file=${(v)opt_args[(I)(-f|--file|--makefile)]}
if [[ -n $file ]]
then
[[ $file == [^/]* ]] && file=${(q)$(_make-findBasedir $words)}/$file
[[ $file == [^/]* ]] && file=$basedir/$file
[[ -r $file ]] || file=
else
local basedir
basedir=${$(_make-findBasedir $words)}
if [[ $is_gnu == gnu && -r $basedir/GNUmakefile ]]
then
file=$basedir/GNUmakefile
@ -287,7 +262,7 @@ _make() {
_alternative \
'targets:make target:compadd -Q -a TARGETS' \
'variables:make variable:compadd -S = -F keys -k VARIABLES' \
'*:file:_files' && ret=0
'*:file:_files -W $basedir' && ret=0
fi
esac