From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18886 invoked by alias); 3 Nov 2017 21:49:23 -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: 41983 Received: (qmail 5365 invoked by uid 1010); 3 Nov 2017 21:49:22 -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.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(-1.7/5.0):. Processed in 2.233323 secs); 03 Nov 2017 21:49:22 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RP_MATCHES_RCVD,SPF_PASS,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=DOW4=CB=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | 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=1509745744; bh=Zd+jorOhmFusE4ZX9/V1c4FD5GplYARggqiUCRf+XhY=; h=From:To:Subject:Date:From:Subject; b=h6giPU0pKp5Xzkn6idjuxnhGEaQkLhVqsc0J2320AzXAwv6oMy6nq7KYWQ7ubcCzLgWXjlovQzrw7494y/CleVg+I+kn6Fe++OmxqEU9kvnd7uiXydLfbW+SkanV/W+6h7623n24gqMwy6yzD+Dxqm2Yp9c3DBqSJjgVNPG+TYeEbECW9r1I5GTMlTfSEdC0db/RKfPS0kDSMgolPBKXI945w6tCgCGB/g4iQd28p/IK4BDHHkgXBW5n/hj+VEYNgDCCF5qQQDSC86s90MgzwjtAXn8q3ZYEcoQz4IC7JFGO9ssqKuyxWOhHNQ+6XmLu6QGK4Nj8gi8mMrac5ELwmQ== X-YMail-OSG: 8x0JcPQVM1nZ_.uiLuJVuqi_vCRJ97FV7SK99sIhaKKm7BptzkjBYZxDQ7vqyCF ragED7jIDXU..htn7MBIhhSmswLrSagUBwXiopmyRSk.IOjXwyu5KUCkyvsSHqrnXThN4PtIEFvX iwmzB5RNXbQ.y9mWlXGf9KAA5K1aqiFkhp.hZRyhMkEE0bDXPhKKEeXy_DyXW8jzK9P8iMCIsDCb oK7kZk.fj9mnCdz2mRmbLE1uAz.gNF9BOPJ4jiuUAED3JLrqrzq_f2MRKv4oOskbnenIwRZnwWXX W7tw8yfoTrSAAuXUhYv3eoo2n3UEx8StPVY9cm_pMwpLlYEPwEgbxRicDkjJzWWwV_pxXKjsskVY oJtwGyV1WfHc6v_yaY7nOPsqSCda9BRMH5kRgQfbyT1kHVK2EwU25o7dkC01TEC14iOlt3sZpv63 llF9dWZHSzJ.ir4ZB9jJyq_g2dgVlb0.aHfrV0BBD1kJISEImtlcJckh1qKZtRUumjFHB8JfEfD_ Q7jIV0fEhls26Vyhxd_MtDEXhdDqbRH4zPpgN X-Yahoo-Newman-Id: 728686.40769.bm@smtp112.mail.ir2.yahoo.com X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: 8x0JcPQVM1nZ_.uiLuJVuqi_vCRJ97FV7SK99sIhaKKm7Bp tzkjBYZxDQ7vqyCFragED7jIDXU..htn7MBIhhSmswLrSagUBwXiopmyRSk. IOjXwyu5KUCkyvsSHqrnXThN4PtIEFvXiwmzB5RNXbQ.y9mWlXGf9KAA5K1a qiFkhp.hZRyhMkEE0bDXPhKKEeXy_DyXW8jzK9P8iMCIsDCboK7kZk.fj9mn Cdz2mRmbLE1uAz.gNF9BOPJ4jiuUAED3JLrqrzq_f2MRKv4oOskbnenIwRZn wWXXW7tw8yfoTrSAAuXUhYv3eoo2n3UEx8StPVY9cm_pMwpLlYEPwEgbxRic DkjJzWWwV_pxXKjsskVYoJtwGyV1WfHc6v_yaY7nOPsqSCda9BRMH5kRgQfb yT1kHVK2EwU25o7dkC01TEC14iOlt3sZpv63llF9dWZHSzJ.ir4ZB9jJyq_g 2dgVlb0.aHfrV0BBD1kJISEImtlcJckh1qKZtRUumjFHB8JfEfD_Q7jIV0fE hls26Vyhxd_MtDEXhdDqbRH4zPpgN X-Yahoo-SMTP: opAkk_CswBAce_kJ3nIPlH80cJI- From: Oliver Kiddle To: Zsh workers Subject: PATCH: _arguments option exclusion from a normal argument MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <23841.1509745743.1@thecus.kiddle.eu> Date: Fri, 03 Nov 2017 22:49:03 +0100 Message-ID: <23842.1509745743@thecus.kiddle.eu> This is another follow-on bug fix to 40269 which was the patch that dealt with exclusions of single letter options clumped in a single word. That patch made more use of the cur parameter passed to ca_inactive. However in this one particular call to ca_inactive, cur is effectively wrong because argxor comes from an earlier loop iteration. That's always been wrong but it didn't matter before. Subtracting 1 might not strictly be accurate either but as exclusion lists apply to all following words it does the job. In practical terms this fixes a (-) exclusion on a normal argument to also exclude long options. For completeness, I also added a + option to the test case: (-) does exclude + options. Oliver diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c index 70cea9f27..71d61563b 100644 --- a/Src/Zle/computil.c +++ b/Src/Zle/computil.c @@ -2080,7 +2080,7 @@ ca_parse_line(Cadef d, Cadef all, int multi, int first) remnulargs(line); untokenize(line); - ca_inactive(d, argxor, cur, 0); + ca_inactive(d, argxor, cur - 1, 0); if ((d->flags & CDF_SEP) && cur != compcurrent && !strcmp(line, "--")) { ca_inactive(d, NULL, cur, 1); continue; diff --git a/Test/Y03arguments.ztst b/Test/Y03arguments.ztst index 58a205112..3e974a5a6 100644 --- a/Test/Y03arguments.ztst +++ b/Test/Y03arguments.ztst @@ -499,12 +499,18 @@ >NO:{-c} >NO:{-g} - tst_arguments '(-)-h' -a -b -c + tst_arguments '(-)-h' -a -b -c --long +p comptest $'tst -h -\t' 0:exclude all other options >line: {tst -h -}{} >MESSAGE:{no arguments} + tst_arguments --args -b -c +p '(-)1:normal' + comptest $'tst arg -\t' +0:exclude all options from a normal argument +>line: {tst arg -}{} +>MESSAGE:{no more arguments} + tst_arguments -a '(-a)-b' comptest $'tst - -b\C-b\C-b\C-b\t' 0:exclusion only applies to later words