From: Peter Stephenson <p.stephenson@samsung.com>
To: zsh-users@zsh.org
Subject: Re: Make Completion
Date: Thu, 11 Jul 2013 10:54:53 +0100 [thread overview]
Message-ID: <20130711105453.1615bb3b@pwslap01u.europe.root.pri> (raw)
In-Reply-To: <51DD616D.2090200@goots.org>
On Wed, 10 Jul 2013 14:28:13 +0100
Nick Cross <zsh@goots.org> wrote:
> Am I right in thinking that the make completion under ZSH (5.0.2 on
> Fedora18) does not complete the command line -* options (as opposed to
> Bash which does) ? I have tried "make -<tab>" and nothing happens - in
> bash it prints out a menu of the - options (e.g. --debug).
Yes, it's fairly basic in terms of options, though quite smart about
looking inside makefiles.
Currently it's quite hard to update since it doesn't use _arguments. As
a first step, this fixes that problem, so it should be much easier to
add further GNU option handling as a next step (or further variants if
desired).
Lightly tested --- I don't think I've completely broken it but 100%
satisfaction not guaranteed.
diff --git a/Completion/Unix/Command/_make b/Completion/Unix/Command/_make
index 53e2e1b..72d16bb 100644
--- a/Completion/Unix/Command/_make
+++ b/Completion/Unix/Command/_make
@@ -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
}
pws
next prev parent reply other threads:[~2013-07-11 10:05 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-10 13:28 Nick Cross
2013-07-11 9:54 ` Peter Stephenson [this message]
2013-07-11 12:58 ` Nick Cross
2013-07-11 13:33 ` Peter Stephenson
2013-07-11 14:44 ` Frank Terbeck
2013-07-11 22:15 ` Nick Cross
2013-07-12 4:26 ` Bart Schaefer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130711105453.1615bb3b@pwslap01u.europe.root.pri \
--to=p.stephenson@samsung.com \
--cc=zsh-users@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).