From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id e8b22566 for ; Wed, 6 Nov 2019 21:51:59 +0000 (UTC) Received: (qmail 13439 invoked by alias); 6 Nov 2019 21:51:53 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 44896 Received: (qmail 20149 invoked by uid 1010); 6 Nov 2019 21:51:53 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.102.0/25622. spamassassin: 3.4.2. Clear:RC:0(205.235.26.22):SA:0(-1.6/5.0):. Processed in 1.392919 secs); 06 Nov 2019 21:51:53 -0000 X-Envelope-From: SRS0=ZqLs=Y6=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at bounces.park01.gkg.net designates 205.235.26.22 as permitted sender) X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1573077066; bh=j2t4HFgc2kPdtM9yLGPLFZBRXtNLLsFVwvruLVsZHIc=; h=From:To:Subject:Date:References:From:Subject; b=Eb4iWbGyNaiELTCad5SNtyYviVqDSfhYql0kCNDHFWWsaSCj3SfjA7/jLCcmO1GJ/9MclcjEtmCiXHWg9EaFn+dcKhs4tKtsTBYOxMUH2g/d9PVL52/O4DYanZnDgHZ8FEOm2hq1vMMCN038cafDOuAJnjFt6yeHYmHD39hMGlm/NxlpE+3wJh4PmGX7176Jiga3TtgUaveEUGxYuDeBNt2qHJHZbhL1bCr/kl/AoIwSdCA4tTHhS8gzRIf/LJfKpeOfvf2MV0ZWaEPq/DPTV3uDfxs/+mANt7roEvaPaA5UXQQx85U+A6rsbABfLe2pgmBkYLrRpvgC2q8bf24YTQ== X-YMail-OSG: Seak5GAVM1l2UGI.qgLhGG3BEG31B3Z3iNcPH7nhqW1Z27odRHbD6RFNWHPyI4n imIaVeZ9VedV6vFmLCxdYnwdTwwocmkSQdSU6Mp_9CJ.u_IOfFn_vlg9wredRKYJiKxNh34p3tX6 RlilLqAe.333y3G7OwHKcCPEexn1mLcnEwpDfDSveXm0rmc1vUbSw93.SG9lTGu.df8ASf_CqlwE tfV6KFb1cxB3vJVIfQdboy2d3XPthNnpUSI79YiMr2FcMh3ORAJlyqmJSkiYIEIs5jDpL6dZJR3r IxxY2xlojC05bDL5zmSoql55l7T0M8xpTwrF.ILziQb23FEK7oWTYXWapMnfjPpF_LItvCvYiQ0j 0RF1MW9CfPrLVE806LTVz1vExZ4o675KTH0nmwnetj91TA1n65DZxoupAH9Lh.H2Kz6_tvg9iEBT R8wulfIQOlyPiBw4BgS6TSLrA1Wk8CCADI8eqblcy9GbhE1Os5259SG7QNhaG8bh39No34sBaN6P _zFtsMFyXBTBP2r_2xVvzhAnaNzX612NaxfoVrWeFV85WV93H8zMx7sPdjTjALIEKhRnn2LANZxX 7bJ3fK0WfTHEZZeX.9akgkP.Mp63J7fTF8VkhEPeLMsCWcCRP0VOm_ZEGq7IFtExAzblCx0QmHFx UByRyIzbPHPZHEOUOmSVo1QTc3QpH8HA9IV.NCBRdD0a9PRUyaXPoaDj6cEQh8M1tylII2o_fMcl i2uphsHDO037OGgnGQmpaIwupHQtYqbSWKnWU6.363GQb8vRWH3ykN8a6wLBMYrn.8Y0DVulC7Bz _sV.E_L4YdLSt9hqLJj0jCrMuYIija4F1Vcx1fSnMZdkvWBLiyvHD5JwApvytF2XzGZAZqtfpta7 lAUJz8NHNwHmH3hyosLlpsw4eQvfY1wXveaaOjorKhvtxdFzqpzwyXnE6.IRSpCHKjXd_Tyyk6a2 DnWKHknFvYhRfdMLKBzZXWAKUDqcdY9bxm5tS68cA4Rak9ADXyAtV6FgLpaacPsUKVkDZOLvm8eE LLsUhxu91zf59puIMQV70LHbJ_bwobgCW0KZcOacVSPZ9MNfPTZzNQfDTA5bhBeE7jbYqEuzyt3X A87FZJ8ocdYEfyrC9zzT5qL7Ws1UfnxtojoO4aHj4V5m7sECukYUMrMnM0SCBYcEk3bvbm6ZuWWJ 7MZS4y2ewsoRee1hjWz80UygrlTg.gYVeDpHC54fQgSLNiDkDDL9Mc6TCmdCsWkThFWtXLv9zp7z fK4H4QxuAnWn7R4j_QGAQNMANzGqVoDZVocsYYXfWobBW6FpDZMi1zW8Qv1f98sErMy_fFtsvrj4 X3n9iwQ5ghQd3Yov.XVprsBCSMQGdtP3PHoqKndc0TcRH24GAqmEE.kbHuyI9HmYIL2nOficIiQz aRjIB718- From: Oliver Kiddle To: Zsh workers Subject: PATCH: following -C option in make completion MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <2023.1573077069.1@hydra> Date: Wed, 06 Nov 2019 22:51:09 +0100 Message-ID: <2024-1573077069.922525@CD2K.zG8N.q383> References: <2024-1573077069.922525.ref@CD2K.zG8N.q383> X-Mailer: WebService/1.1.14638 hermes Apache-HttpAsyncClient/4.1.4 (Java/1.8.0_181) In the make completion, there's some very old logic for picking out the argument to -C. _arguments makes this rather easier if we just look in $opt_args and has the advantage that we can handle -Cdir and --directory forms (not just -C dir). This patch also uses the computed $basedir value for our view of the GNU make $(CURDIR) macro so it will handle include files referenced relative to $(CURDIR). Previously $basedir was forced into absolute form which I don't think gains us anything - _files -W doesn't care. Neither does finding files to include. But perhaps this breaks things for some form or another. I'm also not sure what the (q) modifier achieved. I've used ${(Q)~opt_args... so it'll expand usernames and remove a level of quoting. opt_args also does some extra quoting for colons which could also be removed. We could do with some sort of safe-eval for where completion functions make use of bits of the command line - expanding variables and named directories is useful but command-substitutions not so. Oliver diff --git a/Completion/Unix/Command/_make b/Completion/Unix/Command/_make index 3dcf479c3..06971f07a 100644 --- a/Completion/Unix/Command/_make +++ b/Completion/Unix/Command/_make @@ -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