From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2462 invoked by alias); 2 Apr 2018 21:23:40 -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: 42575 Received: (qmail 26944 invoked by uid 1010); 2 Apr 2018 21:23:40 -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.4/5.0):. Processed in 15.107752 secs); 02 Apr 2018 21:23:40 -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.4 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, SPF_PASS,T_DKIM_INVALID,T_RP_MATCHES_RCVD autolearn=no autolearn_force=no version=3.4.1 X-Envelope-From: SRS0=ILfF=GX=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=1522704196; bh=udHnUWfTCxtkXFejx8Cnqk4kjJwjLBB0Pn/M0s4zIuQ=; h=From:To:Subject:Date:From:Subject; b=p9BO1MGzz2dAyYTkqXAkWtieXGEW73JSucoS2G1sx0y3Et9wrEGB0edY7Eb7mTCgMSahBMPhBYo99DgaRpG9JeTxrdpbTODUs4ttyPMDsIRcTcNgnrUqh0GtdwQlLdSL53psWUxIRlJk/faYCx9MJxlrrrwMgxNGomn5STcEKb/zhoM+97z5OwWv+JGoQjY8HV6RYpbQN/zXcfZV6Q88cbNfQeGaVvPqaCvHo4tBmAQEeff3zsajIweUFjKLY60m/PWPviq0zVtmyE9n1iZ5azVU1DPKhpSZM4ELL+L9WVnTKOkBM/Phb+Lilp/6GD4vpZ5qGusV53MAAmsYk1jlOg== X-YMail-OSG: QAjqFu0VM1koxgfjZI6rbhneozIprUVocJuXowzgz4jJsnPGYvno3XN8Hcx3suK FhJQNtvgBUkUIhtIFHYhuBtfs7pGY5O6KpQqIkpDVf_cgDp4tItoM2OmaRjxUT.MmB.UKxmNsiKv hdQU.mKE6BWsawEvff7cW5QNuprwPZ52mkGcFW1m9_z6N9agtsabVOuUWIngvOQINoq2dc.LsC2q ocV37XJP0x3vGdCThlwwIHQsekX_6HSnyP0g5_TZ4cFyvYm0yqnVS4skblMMxfT839NnsHykbNcg 2arnxeL9U1bvBJvyx_okXCfbdBKzWlxSiBmgu_uj5Lwj81Y8NS2Cc8taiTiU3Hs7bA2IlTxYbuVh f0pKBdQTkKAoQKPoTjAAwub1YcPoG5Nvk4MXhfsuNp61ZmmGVeiNWCI5YMfTiN5BR6BxX4aJZpi9 .EPZE99lXPDIRYKZjlVV4ImFuP2LnZmehS4AnGm9sgfAO6TvCT1EhQhJ_eYlFGOoJ3pqtaTYOBWc esVxGKJLq3A-- From: Oliver Kiddle To: Zsh workers Subject: PATCH: _arguments -W fix MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <16038.1522704183.1@thecus> Date: Mon, 02 Apr 2018 23:23:03 +0200 Message-ID: <16039.1522704183@thecus> This fixes a bug introduced in 41824 that could cause options to be completed in the argument to another option position. The condition had originally been (lstate->doff && lstate->def). Much of the 41824 changes relate to doff which is essentially the number of characters moved to $IPREFIX. The original purpose of that condition appears to only apply with _arguments' unusual -W option. That option isn't covered in the tests. Oliver diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c index 4ce8eeee5..2e86e5740 100644 --- a/Src/Zle/computil.c +++ b/Src/Zle/computil.c @@ -2675,7 +2675,7 @@ bin_comparguments(char *nam, char **args, UNUSED(Options ops), UNUSED(int func)) for (; lstate; lstate = lstate->snext) { if (lstate->actopts && - (lstate->opt || lstate->def || + (lstate->opt || (ca_doff && lstate->def) || (lstate->def && lstate->def->opt && (lstate->def->type == CAA_OPT || (lstate->def->type >= CAA_RARGS && diff --git a/Test/Y03arguments.ztst b/Test/Y03arguments.ztst index 761b4b1d2..fa4589374 100644 --- a/Test/Y03arguments.ztst +++ b/Test/Y03arguments.ztst @@ -184,6 +184,12 @@ 0:sticky option argument >line: {tst -x }{} + tst_arguments '-x:arg' -y -z + comptest $'tst -x -\t' +0:option argument with prefix that passes option prefix-needed test +>line: {tst -x -}{} +>DESCRIPTION:{arg} + tst_arguments '-x[desc]' comptest $'tst -x\t' 0:end of option sequence @@ -721,6 +727,15 @@ F:shouldn't offer -t in the first case (with stacked options) >line: {tst --prefix=one }{} >line: {tst --prefix=one --prop=}{} + tst_arguments -s -W -a+:arg -b + comptest $'tst -a\t' +0:with -W options mixed with arguments +>line: {tst -a}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{-b} + + %clean zmodload -ui zsh/zpty