From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 15967 invoked from network); 23 Aug 2023 03:27:52 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 23 Aug 2023 03:27:52 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1692761272; b=Pwb7y7x04iTiI3qDD1E8rnrbM+hBkTtLJxI5ccplC8zXTtbOOYTT8cJgbCYZXBN11FktEY6BIF F6aR7OSjw75K0cD2VnM2oztsp4b3TILykhF7l10juo5U5E8Yi8+zRzYLDJk56Gxp1EUjKPE2YT /h3eBn4Ko00vitIje2QWyqnPM6zuHlEM/3Zo1hnQ2UlgcdgLJHUh3fg7nnSaEIZUAJ6hZ/RQWQ aLLkGkohyljimdEmMome0GI+CuZMADMMS/Ehc5Z+qhjcP+7Vxc6L9zagxhYQ8QJd4qjLAUzFSw 57bleq4So4V43Nom817KoOuW2IaUaPb5GRq9bKwzLi5B7Q==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lj1-f174.google.com) smtp.remote-ip=209.85.208.174; dkim=pass header.d=brasslantern-com.20221208.gappssmtp.com header.s=20221208 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1692761272; bh=J5GqzJ9R2KT/zxRiBFp56wgne7IyX4cshzj4ULJsPAc=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=ZltYPKUtnPQjLhPZ0YLwTqC7V17TUq9fyhTAGVn10muGSYuQDDbHBMWuJ+z5H3BX+tqtlk1UfV OEc2MjitaYZEYGIm2IO1Z53cF3+vyZFc0rn6R58R30yMJ+n3jLNSPN1kmnYWSuPSP4L5dvUEbg 00tzsgvuLX5+yeupIZSYeFJH3Lv2fb555UZxHagpXFK8N2Nl8SR0abP4czEIve1rD3VtLW35zz hr+ptkI9IXxdrHwOomixi031c7Hr1kogyJR5yvszCW2gqKGeTx0VH2KV8Xl8ixq9SBkcE/DcQA cp1hLG+bxcYbYxmy5nRs/4oDH+WoICZ64lEbmvrVEGMPqQ==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID :Date:From:In-Reply-To:References:MIME-Version:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=NkTBfxaY+MmqYAZwC6Aor4j4I4oKvyFoIoo4EgdYHZk=; b=deaPTYoC7IR5kd5gf6//axM6Xo QYyeikEJdLWAiaVZPQLWjy7Z2XKiyf+c07Ac+VSAYbGJgJIVOuSY1f+6eURmnbbKkzCYGeb/TRbhY nxN7Xp1CbNi4FAEp8I1U/qTJJ35twvueanvcPvn8KwAILk4R3qZWgxs6h2aPVbi2uPICo95hN8K/E SwlARxrmyyCxYqaROZC1o+uqbm/IzZvGmbTwGWCuWd1q4fDHlOTjQTwk2C0zdmJSa5BuQY9y+2fPI kobYATU4/GAHcOmTYZJp8HNjjzOd5VV8BC4AMfNTmIyeT8afGpHedJw6Zvvmn6GFPwHihQIOi4YEh GubaVD8Q==; Received: by zero.zsh.org with local id 1qYeX8-0009vC-Km; Wed, 23 Aug 2023 03:27:50 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lj1-f174.google.com) smtp.remote-ip=209.85.208.174; dkim=pass header.d=brasslantern-com.20221208.gappssmtp.com header.s=20221208 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-lj1-f174.google.com ([209.85.208.174]:44536) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1qYeWq-0009bg-My; Wed, 23 Aug 2023 03:27:33 +0000 Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-2bb8a12e819so80210041fa.1 for ; Tue, 22 Aug 2023 20:27:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20221208.gappssmtp.com; s=20221208; t=1692761252; x=1693366052; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=NkTBfxaY+MmqYAZwC6Aor4j4I4oKvyFoIoo4EgdYHZk=; b=2ZW7UeCn1Qzv5TLq5bgRUSkfG2lWrIOEV7clsYoANdWReQIct+SsuV+KMt6lt9O0bD y+zkii+JwzP0dAiNFTzXmYbDWAn9eTaqFO7RKmXkDGVNI7v1E03ktBBs+oldN/HP10E1 VoKUuH4YHNX5QXahz+X/piAxfVAPHV5g5dK+BQhiFEaWRR2EG/rhY2uEr8ZkcC6gWJ0g Dz7Ep6cSZ3RlfSRRUhOGSYyAJO3rk9i7BKuDl5WLkcFxk/vRFtveEBdoGnN/3+k+GmyP IEj7/B7eLBs48Z/c0detbAo7ZqRfT5hHFjcuy0oA305l+z7bAZiX8e6X9j2EDjQRyTDu K+sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692761252; x=1693366052; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NkTBfxaY+MmqYAZwC6Aor4j4I4oKvyFoIoo4EgdYHZk=; b=HquvY/ngTVvoag8eX75CbfgbIQhEINerLj9PNxOe7nXmLJiwFQj4phPZn7xTjIplMN 1PRaqpKgE1eujEnZbI0eg4qUa74F39w35BKPHdNfct7V6raec8TZS4cf7QB7nrZIDqr7 ZIJvHwlSKDTODp6hLkGTv1eaKrwx/pHW697nv2Ac72uN+deo/Fn0BcqNCODRPVw+thv8 oLWTKrPgmnxBLNNOZFGh4E3thEfr2x4NZdHdnf7JT7IMUGIRVhgT6supqO9yjiNvxpws IvsfcJT8FnkICBmhtoQdNb8/7qPs675jd/ad9WyVj3IqjQl+vQXxe+47rwL2/T4ENMtV BZ9Q== X-Gm-Message-State: AOJu0Yyw106rB+ofJ42TyXOiJ6xTRMCoJ1wef5gARnh0UKpWPPy5K8Fd NjAHJdxhB2TSV4oQa066Po793Xk98RFkRTb2H85ddw== X-Google-Smtp-Source: AGHT+IHPQMqopKvRzusojlk4MQbz4SCsqaBhFtRilomcIgngdLoD3uju/QY6kUl/I5oHykMQr6ga2CbwrrL7C3Dvk2Q= X-Received: by 2002:a2e:9943:0:b0:2b6:eb5a:d377 with SMTP id r3-20020a2e9943000000b002b6eb5ad377mr9138833ljj.5.1692761251495; Tue, 22 Aug 2023 20:27:31 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Bart Schaefer Date: Tue, 22 Aug 2023 20:27:20 -0700 Message-ID: Subject: Re: [PATCH] Enable linewise edit-command when in visual-line To: Christoffer Lundell Cc: "zsh-workers@zsh.org" Content-Type: multipart/mixed; boundary="0000000000001693b506038eb11f" X-Seq: 52075 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: --0000000000001693b506038eb11f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Aug 21, 2023 at 7:14=E2=80=AFAM Christoffer Lundell wrote: > > Change behavior of edit-command in visual-line mode to edit command linew= ise > instead of only allowing editing of the text between MARK and CURSOR. > > The rationale being that in visual-line mode the entire line(s) appears v= isually > selected, and so I expect edit-command to operate on the entire line(s). This seems quite reasonable. > With this patch everything visually selected will be brought into the edi= tor, > while preserving cursor position where applicable. This looks OK, but I think it can be made a bit clearer by using the (i)/(I) subscript indexing flags rather than ${(SB)...}. This might just be my own bias, but those flags already return the "correct" values when the search fails, so the extra marks and offsets and tests are not needed. I'm no longer a regular vi user (and never used line-wise mode years ago when I was) so I do have a couple of questions about your index computations ... > + left=3D${(SB)${BUFFER[1,mark_left]}%$'\n'} > + (( left !=3D 1 )) && (( left++ )) This I follow. If the (SB) is replaced with ... local nl=3D$'\n' left=3D${${BUFFER[1,mark_left]}[(I)$nl]} ... then $left can unconditionally be incremented because the result will be 0 rather than 1 if there is no newline in the range. Unless of course [[ $BUFFER[1] =3D=3D $nl ]] in which case your version includes that newline in the selection and mine doesn't. Which one is correct? The $nl is introduced because subscript brackets are parsed like double quotes, which means you can't use $'\n' inside them. > + offset_right=3D${(SB)${BUFFER[mark_right+1,-1]}#$'\n'} This I'm not sure of -- why mark_right+1 ? In this direction that seems to mean that if the mark is exactly on the newline, you're extending to the following newline. Is that how it's meant to work? > + if (( offset_right =3D=3D 1 )); then > + right=3D$#BUFFER > + else > + (( right =3D mark_right + offset_right - 1 )) > + fi I would do ... right=3D${${BUFFER[mark_right,-1]}[(i)$nl]} (( right +=3D mark_right - 1 )) ... which returns the length of the range plus one if there is no newline, so $right may be unconditionally decremented. Again, though, I would expect that if mark_right is on the newline, we stop there, not skip it and find the next. With my version the remaining tweak needed is to decrement $right a second time when [[ $BUFFER[right] =3D=3D $nl ]] because use of "$(<$1)" trims a trailing newline when reading the back the editor file. Unwinding a bit to remove the additional locals, the result is the attached= . --0000000000001693b506038eb11f Content-Type: text/plain; charset="US-ASCII"; name="edcomln.txt" Content-Disposition: attachment; filename="edcomln.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lln69gag0 ZGlmZiAtLWdpdCBhL0Z1bmN0aW9ucy9abGUvZWRpdC1jb21tYW5kLWxpbmUgYi9GdW5jdGlvbnMv WmxlL2VkaXQtY29tbWFuZC1saW5lCmluZGV4IDVmN2VhMzIxZi4uYzliMTQwMzc4IDEwMDY0NAot LS0gYS9GdW5jdGlvbnMvWmxlL2VkaXQtY29tbWFuZC1saW5lCisrKyBiL0Z1bmN0aW9ucy9abGUv ZWRpdC1jb21tYW5kLWxpbmUKQEAgLTExLDcgKzExLDcgQEAgbG9jYWwgbGVmdCByaWdodCBwcmVi dWZmZXIgYnVmZmVyPSRCVUZGRVIgbGJ1ZmZlcj0kTEJVRkZFUgogbG9jYWwgVE1QU1VGRklYPS56 c2gKICMgc2V0IHVwIHBhcmFtZXRlcnMgZGVwZW5kaW5nIG9uIHdoaWNoIGNvbnRleHQgd2UgYXJl IGNhbGxlZCBmcm9tLAogIyBzZWUgYmVsb3cgY29tbWVudCBmb3IgbW9yZSBkZXRhaWxzCi1pZiAo KCBSRUdJT05fQUNUSVZFICkpOyB0aGVuCitpZiAoKCBSRUdJT05fQUNUSVZFID09IDEgKSk7IHRo ZW4KICAgaWYgKCggQ1VSU09SIDwgTUFSSyApKTsgdGhlbgogICAgIGxlZnQ9JENVUlNPUiByaWdo dD0kTUFSSwogICAgIGxidWZmZXI9CkBAIC0xOSw3ICsxOSwyMyBAQCBpZiAoKCBSRUdJT05fQUNU SVZFICkpOyB0aGVuCiAgICAgbGVmdD0kTUFSSyByaWdodD0kQ1VSU09SCiAgICAgbGJ1ZmZlclty aWdodC1sZWZ0LC0xXT0KICAgZmkKLSAgKCggbGVmdCsrICkpCisgIGJ1ZmZlcj0kQlVGRkVSWysr bGVmdCxyaWdodF0KK2VsaWYgKCggUkVHSU9OX0FDVElWRSA9PSAyICkpOyB0aGVuCisgIGxvY2Fs IG5sPSQnXG4nCisgIGlmICgoIENVUlNPUiA8IE1BUksgKSk7IHRoZW4KKyAgICBsZWZ0PSR7JHtC VUZGRVJbMSxDVVJTT1JdfVsoSSkkbmxdfQorICAgIHJpZ2h0PSR7JHtCVUZGRVJbTUFSSywtMV19 WyhpKSRubF19CisgICAgKCggcmlnaHQgKz0gTUFSSyApKQorICBlbHNlCisgICAgbGVmdD0keyR7 QlVGRkVSWzEsTUFSS119WyhJKSRubF19CisgICAgcmlnaHQ9JHske0JVRkZFUltDVVJTT1IsLTFd fVsoaSkkbmxdfQorICAgICgoIHJpZ2h0ICs9IENVUlNPUiApKQorICBmaQorICBsYnVmZmVyPSRC VUZGRVJbMSwrK2xlZnRdCisgIGlmIFtbICRCVUZGRVJbLS1yaWdodF0gPSAkbmwgXV07IHRoZW4K KyAgICAjIEtlZXAgdGhlIG5ld2xpbmUgYmVjYXVzZSAiJCg8JDEpIiBiZWxvdyB0cmltcyBpdAor ICAgICgoIC0tcmlnaHQgKSkKKyAgZmkKICAgYnVmZmVyPSRCVUZGRVJbbGVmdCxyaWdodF0KIGVs aWYgKCggISBaTEVfUkVDVVJTSVZFICkpOyB0aGVuCiAgIHByZWJ1ZmZlcj0kUFJFQlVGRkVSCg== --0000000000001693b506038eb11f--