From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17397 invoked by alias); 3 Nov 2016 14:55:36 -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: X-Seq: 39820 Received: (qmail 18440 invoked from network); 3 Nov 2016 14:55:36 -0000 X-Qmail-Scanner-Diagnostics: from mail-ua0-f196.google.com 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(209.85.217.196):SA:0(0.0/5.0):. Processed in 0.578875 secs); 03 Nov 2016 14:55:36 -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=0.0 required=5.0 tests=SPF_PASS,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: schaefer@brasslantern.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.217.196 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=from:message-id:date:in-reply-to:comments:references:to:subject :mime-version; bh=wyRqjIEvSQDYOEDxfcYp2j964zHEtYU9SbGsVUagQeA=; b=RRJwDptq2O988yMNNe8I+FECCICRGt65ZecmT1/AcZc+pub0IPXAR9Yd4Kw5ITMBgd EwmVvrudTqxeDxdfPWRapj3wVi+BQGp5zD4MNfkTzlcAo7ZG9R1LwwdA1DeHGMRpXAov T78vI5TxVw4jIuiE+AZftKlewAxQGFoO4drPo73YJIJRBk8B904AaeLdzpBzMiQaL5VV jQBcoeoOM+IBb58TjuZm4XbQD40wKdOT8a0bNHLudH+6wRdLSa7b9peK3+xjFGFwmnHn wCuq9HGO8F7N+piTJ0JRZ/ZVocFgBefpyPTCvwy0unsQCqYpV/XhmSl6BZgN+E27ZwXj 5Pag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:message-id:date:in-reply-to:comments :references:to:subject:mime-version; bh=wyRqjIEvSQDYOEDxfcYp2j964zHEtYU9SbGsVUagQeA=; b=Xa2Td6F+wCXpPqQVT44PaLN7CFFDE/gAyHNUZAHksgR5JyD8XovyMdnAnbmfSzOxWX oh7p+Qxf4hlb2S7iglPJ7KplWOO8fqjNWyYY9ReRYSM/DK0Fz/jW00LDmimoWwystilV iuGnJ49CjtNCgKKzpUFtcnWy8tbleSxhKYgb317aXPrRuH5+sHEUGCdsHIHj2khBFjzv V3sdzzNCecx4DLs2re3C+0WVifY1GGgp/wTQV2Nd5RSret7vSA0WiQDnzF8sb2byKpWG Zk0ESXx3ryopG5yrFcWQuFB8OySU2if6mAOcGLRQJ5TbHBp5MuI70Bp/O8xddfEhF6ls fFGQ== X-Gm-Message-State: ABUngvetyvWNOKzg0ei6FDKzendL2d81k1PU4NvM76vIvV8SA1rTF8z9ak5tp4Ac+TvbfQ== X-Received: by 10.176.81.178 with SMTP id g47mr7630844uaa.78.1478184927862; Thu, 03 Nov 2016 07:55:27 -0700 (PDT) From: Bart Schaefer Message-Id: <161103075555.ZM14350@torch.brasslantern.com> Date: Thu, 3 Nov 2016 07:55:55 -0700 In-Reply-To: <37864.1478176981@hydra.kiddle.eu> Comments: In reply to Oliver Kiddle "Re: Bug in ZSH's vi emulation" (Nov 3, 1:43pm) References: <20161005080921.GB26647@raspi> <161005101938.ZM12590@torch.brasslantern.com> <20161102045925.GA6763@fujitsu.shahaf.local2> <11719.1478105483@hydra.kiddle.eu> <161102214418.ZM12525@torch.brasslantern.com> <37864.1478176981@hydra.kiddle.eu> X-Mailer: OpenZMail Classic (0.9.2 24April2005) To: zsh-workers@zsh.org Subject: Re: Bug in ZSH's vi emulation MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Nov 3, 1:43pm, Oliver Kiddle wrote: } } It might also be good to } tweak the comment leading up to this function (startvichange) to } reference keybuf instead of lastchar. When making this change I also noticed that vichgbuf was not being nul-terminated in the (im == -2) case. Updated patch (replaces 39814): diff --git a/Src/Zle/zle_vi.c b/Src/Zle/zle_vi.c index 1e0402d..95646a9 100644 --- a/Src/Zle/zle_vi.c +++ b/Src/Zle/zle_vi.c @@ -71,7 +71,7 @@ static int inrepeat, vichgrepeat; * im: >= 0: is an insertmode * -1: skip setting insert mode * -2: entering viins at start of editing from clean --- don't use - * inrepeat or lastchar, synthesise an i to enter insert mode. + * inrepeat or keybuf, synthesise an entery to insert mode. */ /**/ @@ -91,14 +91,16 @@ startvichange(int im) lastmod = zmod; if (vichgbuf) free(vichgbuf); - vichgbuf = (char *)zalloc(vichgbufsz = 16); + vichgbuf = (char *)zalloc(vichgbufsz = 16 + keybuflen); if (im == -2) { vichgbuf[0] = zlell ? (insmode ? (zlecs < zlell ? 'i' : 'a') : 'R') : 'o'; + vichgbuf[1] = '\0'; + vichgbufptr = 1; } else { - vichgbuf[0] = lastchar; + strcpy(vichgbuf, keybuf); + unmetafy(vichgbuf, &vichgbufptr); } - vichgbufptr = 1; vichgrepeat = 0; } }