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.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 26671 invoked from network); 23 Aug 2023 09:06:49 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 23 Aug 2023 09:06:49 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1692781609; b=QXVBsidk65vp1+S4DzZDyYuzIJpEqb01AWXbqlpST3597FZBTwrlBvHcrumW6RZdu4zNidZ/dz Ilbw7hns/2UKgzswvePOHzCm4S7vl7CqwWza1Ds+zkuy0dleISo/yEcSK9A/skFppBivcVfNai M2hLkXk7oaLrI7A9BryfRQYaVSIB/J6DHJ1pb9/UEWQ2Chgv3ThESioaswPgxhVAIgEuuyduyH 0wSdNX/fWNU0BGZtBWYsqdNqfBtH+SZdshgzB+t/gjjrpb+paIqbm4QfXUs6oYRT2JtyTdhbW6 7yYPAJkavQhZYc97rFU8fujl/LcuhfRNJQQd6w8sS3CWyw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-40131.protonmail.ch) smtp.remote-ip=185.70.40.131; dkim=pass header.d=protonmail.com header.s=protonmail3 header.a=rsa-sha256; dmarc=pass header.from=protonmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1692781609; bh=pmpzitAFB0kmHOCHS8rH8ZEcqXpCzkBvHOVnEBz4hrI=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:MIME-Version:References:In-Reply-To:Message-ID: Subject:Cc:From:To:DKIM-Signature:Date:DKIM-Signature; b=ch6NBIOegZvM0deCnZ8T7FunMtzKWDVkz3Wu98hGOPdXI4NsD5HtucWglJFi27gcQ1jZ3tZU+X LkVGpyv1Tqz2MS2qHVk6ZlAojFRprPL62ACrKx+auIK2Lb/rA2g3he94MOaTQ2ZgVDwLJxTbBE LSGIJXR1KMK0fYAI5A3dbI/57CLT44zDjkttc3Fc/ebKEefZ1qozjoHwqCbJ9uJReuDk2dV2LK 2YwCDR2lOdiw1e2UxAYVhgh7y6zoyDadenWib41ydS39HrLbdjUHLXKxEzLnHtOrS3wSfmaa1W anBqwkyaI6hcgQK4OivzOT3hLk629KhpxZtFZSYahUTpGw==; 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:MIME-Version:References: In-Reply-To:Message-ID:Subject:Cc:From:To:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=G0zC2tZzo3ZG4R00Wzf2dvRMj67FL/ls+xyUS2nbVrM=; b=Ojp5ljR75/EFc9ZmfCKfPHsWlQ rJey3cwVkzCZ7Y9jp3w7NpQTeVrHSlAL97Qb8kKwEDThQUIiujNi2ecTvAuRLCLcrJE19n9Z0BeP3 xpy4MmVvLc+yGVbsqUZR9YGK1bkCptKaeMgWSj3rUAuXkHhKfrwZx/OXRd4hnQ5F8NjpvQ7MhjBun KwcYrl99tgdnwxzO3/KDI3rUZt/wnXl6Dff9HpP38KdK1oKidbGTNP8rq1xXF4CBa5UcgrZcgAdsI 1SvQTd390Du/FXE0q4Aex+CNMOlLPuik79ovJbI7z1n+xrFMSrbyBOx35NX1+RFd+bs4CUQkOzTmg L3VUQpxQ==; Received: by zero.zsh.org with local id 1qYjp8-000NYl-V0; Wed, 23 Aug 2023 09:06:47 +0000 Authentication-Results: zsh.org; iprev=pass (mail-40131.protonmail.ch) smtp.remote-ip=185.70.40.131; dkim=pass header.d=protonmail.com header.s=protonmail3 header.a=rsa-sha256; dmarc=pass header.from=protonmail.com; arc=none Received: from mail-40131.protonmail.ch ([185.70.40.131]:18613) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_256_GCM_SHA384:256) id 1qYjoZ-000NG5-0Z; Wed, 23 Aug 2023 09:06:12 +0000 Date: Wed, 23 Aug 2023 09:06:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail3; t=1692781570; x=1693040770; bh=G0zC2tZzo3ZG4R00Wzf2dvRMj67FL/ls+xyUS2nbVrM=; h=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References: Feedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID: Message-ID:BIMI-Selector; b=LwYr42L+9e1D1o/ZoIl80RtbxLic2JbUBgLsCcPhAcYqybXBtpOdZpUnMwoEOmfnI UvxOlDPadoZu1AJ3a5KkRD2P27mNVcKwFj5BhsoVqk/V+f3B3nOczaM15hnN0GdM97 8NF3nfYoNsqKziDzfSE8SFS1L72W7lRUravL22g8D7yLa7CSyLzYUt3cif3cwdVaWL jhvnXBHSQYMlsdXuL05RGz6D2kpugroy8uMXvlwFHGc/JtJyKa3owqWHpl0481+qI+ nunh2URtxESFSWf2jZ+YPzUrizvEIdFu+afZRSmWxs5jGWp3sVb5sGMYgBPq61lYwW 0JtCsNirjsdHQ== To: Bart Schaefer From: Christoffer Lundell Cc: "zsh-workers@zsh.org" Subject: Re: [PATCH] Enable linewise edit-command when in visual-line Message-ID: In-Reply-To: References: Feedback-ID: 3930316:user:proton MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_ntO1ESO6ctH4t1oPLv9Zs6cQBedCyl6Zfv9c2kBpSA" X-Seq: 52082 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: This is a multi-part message in MIME format. --b1_ntO1ESO6ctH4t1oPLv9Zs6cQBedCyl6Zfv9c2kBpSA Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > > + 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]} Thank you, this is much better. > > > + 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? This is because CURSOR and MARK are 0-indexed, according to zshzle(1). And = so a cursor at the first position in a line will have the same index as a newlin= e of the previous line inside an array subscript. Unless I am missing something = I would insist on the following. right=3D${${BUFFER[MARK+1,-1]}[(i)$nl]} (( right +=3D MARK )) which also means we later on no longer need to immediately predecrement $ri= ght, since the matched index will be 1 lower. There is also the issue about supporting cursor position in emacs, since no= w $lbuffer is used to split the selected lines and figure out the cursor line= and column. But in both the original code and in your patch improvement, $lbuff= er will contain text from the beginning of $BUFFER regardless of where the vis= ual selection actually starts. This works fine in vim since they only use byte offsets, but I would recommend changing it to the following in _both_ cases= . lbuffer=3D$lbuffer[++left,-1] This leaves me with the attached suggestion (with the caveat that multiple empty trailing lines will be trimmed to one newline) Thank you a bunch for taking the time to help me, I understand this is not = the most exciting feature :) Christoffer --- Functions/Zle/edit-command-line | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/Functions/Zle/edit-command-line b/Functions/Zle/edit-command-l= ine index 5f7ea321f..d4b405eaf 100644 --- a/Functions/Zle/edit-command-line +++ b/Functions/Zle/edit-command-line @@ -11,15 +11,30 @@ local left right prebuffer buffer=3D$BUFFER lbuffer=3D$= LBUFFER local TMPSUFFIX=3D.zsh # set up parameters depending on which context we are called from, # see below comment for more details -if (( REGION_ACTIVE )); then +if (( REGION_ACTIVE =3D=3D 1 )); then if (( CURSOR < MARK )); then left=3D$CURSOR right=3D$MARK - lbuffer=3D else left=3D$MARK right=3D$CURSOR - lbuffer[right-left,-1]=3D fi - (( left++ )) + lbuffer=3D$lbuffer[++left,-1] + buffer=3D$BUFFER[left,++right] +elif (( REGION_ACTIVE =3D=3D 2 )); then + local nl=3D$'\n' + if (( CURSOR < MARK )); then + left=3D${${BUFFER[1,CURSOR]}[(I)$nl]} + right=3D${${BUFFER[MARK+1,-1]}[(i)$nl]} + (( right +=3D MARK )) + else + left=3D${${BUFFER[1,MARK]}[(I)$nl]} + right=3D${${BUFFER[CURSOR+1,-1]}[(i)$nl]} + (( right +=3D CURSOR )) + fi + lbuffer=3D$lbuffer[++left,-1] + if [[ $BUFFER[right] =3D $nl ]]; then + # Keep the newline because "$(<$1)" below trims it + (( --right )) + fi buffer=3D$BUFFER[left,right] elif (( ! ZLE_RECURSIVE )); then prebuffer=3D$PREBUFFER --=20 2.41.0 --b1_ntO1ESO6ctH4t1oPLv9Zs6cQBedCyl6Zfv9c2kBpSA Content-Type: text/plain; name=edcomln_v3.txt Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=edcomln_v3.txt ZGlmZiAtLWdpdCBhL0Z1bmN0aW9ucy9abGUvZWRpdC1jb21tYW5kLWxpbmUgYi9GdW5jdGlvbnMv WmxlL2VkaXQtY29tbWFuZC1saW5lCmluZGV4IDVmN2VhMzIxZi4uZDRiNDA1ZWFmIDEwMDY0NAot LS0gYS9GdW5jdGlvbnMvWmxlL2VkaXQtY29tbWFuZC1saW5lCisrKyBiL0Z1bmN0aW9ucy9abGUv ZWRpdC1jb21tYW5kLWxpbmUKQEAgLTExLDE1ICsxMSwzMCBAQCBsb2NhbCBsZWZ0IHJpZ2h0IHBy ZWJ1ZmZlciBidWZmZXI9JEJVRkZFUiBsYnVmZmVyPSRMQlVGRkVSCiBsb2NhbCBUTVBTVUZGSVg9 LnpzaAogIyBzZXQgdXAgcGFyYW1ldGVycyBkZXBlbmRpbmcgb24gd2hpY2ggY29udGV4dCB3ZSBh cmUgY2FsbGVkIGZyb20sCiAjIHNlZSBiZWxvdyBjb21tZW50IGZvciBtb3JlIGRldGFpbHMKLWlm ICgoIFJFR0lPTl9BQ1RJVkUgKSk7IHRoZW4KK2lmICgoIFJFR0lPTl9BQ1RJVkUgPT0gMSApKTsg dGhlbgogICBpZiAoKCBDVVJTT1IgPCBNQVJLICkpOyB0aGVuCiAgICAgbGVmdD0kQ1VSU09SIHJp Z2h0PSRNQVJLCi0gICAgbGJ1ZmZlcj0KICAgZWxzZQogICAgIGxlZnQ9JE1BUksgcmlnaHQ9JENV UlNPUgotICAgIGxidWZmZXJbcmlnaHQtbGVmdCwtMV09CiAgIGZpCi0gICgoIGxlZnQrKyApKQor ICBsYnVmZmVyPSRsYnVmZmVyWysrbGVmdCwtMV0KKyAgYnVmZmVyPSRCVUZGRVJbbGVmdCwrK3Jp Z2h0XQorZWxpZiAoKCBSRUdJT05fQUNUSVZFID09IDIgKSk7IHRoZW4KKyAgbG9jYWwgbmw9JCdc bicKKyAgaWYgKCggQ1VSU09SIDwgTUFSSyApKTsgdGhlbgorICAgIGxlZnQ9JHske0JVRkZFUlsx LENVUlNPUl19WyhJKSRubF19CisgICAgcmlnaHQ9JHske0JVRkZFUltNQVJLKzEsLTFdfVsoaSkk bmxdfQorICAgICgoIHJpZ2h0ICs9IE1BUksgKSkKKyAgZWxzZQorICAgIGxlZnQ9JHske0JVRkZF UlsxLE1BUktdfVsoSSkkbmxdfQorICAgIHJpZ2h0PSR7JHtCVUZGRVJbQ1VSU09SKzEsLTFdfVso aSkkbmxdfQorICAgICgoIHJpZ2h0ICs9IENVUlNPUiApKQorICBmaQorICBsYnVmZmVyPSRsYnVm ZmVyWysrbGVmdCwtMV0KKyAgaWYgW1sgJEJVRkZFUltyaWdodF0gPSAkbmwgXV07IHRoZW4KKyAg ICAjIEtlZXAgdGhlIG5ld2xpbmUgYmVjYXVzZSAiJCg8JDEpIiBiZWxvdyB0cmltcyBpdAorICAg ICgoIC0tcmlnaHQgKSkKKyAgZmkKICAgYnVmZmVyPSRCVUZGRVJbbGVmdCxyaWdodF0KIGVsaWYg KCggISBaTEVfUkVDVVJTSVZFICkpOyB0aGVuCiAgIHByZWJ1ZmZlcj0kUFJFQlVGRkVSCi0tIAoy LjQxLjAK --b1_ntO1ESO6ctH4t1oPLv9Zs6cQBedCyl6Zfv9c2kBpSA--