From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Constantin Kulikov Newsgroups: gmane.emacs.devel Subject: Re: [PATCH] Make rectangle-select able to skip lines(empty one, for example) Date: Mon, 30 Jan 2023 17:36:05 +0300 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000051955f05f37c2334" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="24674"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Jan 30 15:37:12 2023 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pMVHT-0006DK-Nj for ged-emacs-devel@m.gmane-mx.org; Mon, 30 Jan 2023 15:37:11 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pMVGn-0005jp-8w; Mon, 30 Jan 2023 09:36:29 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pMVGj-0005jB-Mp for emacs-devel@gnu.org; Mon, 30 Jan 2023 09:36:25 -0500 Original-Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pMVGf-0005CS-1Q for emacs-devel@gnu.org; Mon, 30 Jan 2023 09:36:22 -0500 Original-Received: by mail-ej1-x62b.google.com with SMTP id kt14so32348622ejc.3 for ; Mon, 30 Jan 2023 06:36:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=5NN1nvkkFUGYjtbK+wYPEl6MWymRKPFI+GdKPs2lowY=; b=eYq8rhoMlJOljThMlBt4CZtHBEl+NDRxvJRwF7uLkWVFCOCrGGZ/9S5bhGeYDsMGqv eNB3QbgIWKzJXyP2vY8OAYMiS0NGoV4CZaEZOGziaenN9KrlMQ6IV41yaNEIhfERD5kQ mBq23xoGyq1wu4wd2sh5EIsvWqjYABtx6Pd/X/eR0pnpXsJ5Ijd0JQUXLpsQ0BzSYp7e HCi4Exkom9w5aHAZHXyQ2YDXH8PHVdO0uAqKJRln6+fx3vK7GmytO0yGJwJG6fpF0tQx YVHmpPmzXIcAnmSDZUWscqG2Ehb0plDOsJmoT+9PGiGZpRNpPfMWJms6hmF8S/kK92lm eksA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=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=5NN1nvkkFUGYjtbK+wYPEl6MWymRKPFI+GdKPs2lowY=; b=Cit5M/K5cMgYCifB5nrW6gxFIKg0EO+2vNlO7r+RDGl7JWmuBpaGN2YvsreqAnNLrc R8UIyhLZwXraDcTj4J4CfqiLgD4CjGhSU6891ZcJmYn+uJpjVWpZN+iOhEGGvji6y+an B1otSg63qifs27yGMM2rNNsqZ23nXOoRHCaTTvxLLBvhQh51XnkWunld4Upl/cXkBFqQ GVDQgiyFSr9IqfF7nnNZ8Bn3mP7m/hqrNfIJYaqFQBnt4DHUEVj+9Y0ksXj4lxU1vwKN nIPQt0Qzks0reqO7uR9KV/nFdgRyTTnCppIJTJrKeMkQQGHOFjew9CRyZWoNtqOYlfMJ 0QDQ== X-Gm-Message-State: AO0yUKUbm2Z9R087ocFJgK8jwN7PCNK1/zk9YYvr3tepiI1ouqRwAEr5 5803pyr1Mi5gP0tu/ZmyZ9lnXX3bT322qPB6nNf+BUMn X-Google-Smtp-Source: AK7set/ema28gRS5ZiTsNpxrosc8RRWxf5PkL38PI3ajm7vK9FRkdfyAKBwSnETpPdEYtHQHU+ET6TGD2oBR/XTGBYQ= X-Received: by 2002:a17:906:2c0b:b0:88b:6939:7be0 with SMTP id e11-20020a1709062c0b00b0088b69397be0mr113204ejh.283.1675089377588; Mon, 30 Jan 2023 06:36:17 -0800 (PST) In-Reply-To: Received-SPF: pass client-ip=2a00:1450:4864:20::62b; envelope-from=zxnotdead@gmail.com; helo=mail-ej1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:302788 Archived-At: --00000000000051955f05f37c2334 Content-Type: multipart/alternative; boundary="00000000000051955c05f37c2332" --00000000000051955c05f37c2332 Content-Type: text/plain; charset="UTF-8" Actually it must be named: "*Make `apply-on-rectangle' able to skip lines*". Reattaching the patch as .txt --- rect.el 2023-01-30 14:18:22.542176710 +0300 +++ rect-patched.el 2023-01-30 15:44:14.953579566 +0300 @@ -143,12 +143,16 @@ (rectangle--reset-point-crutches)) ;;; Rectangle operations. +(defvar *rectangle-skip-lines* nil + "If `t' -- skip empty lines, if `function' -- skip line if it returns `nil'. +The function gets all arguments of `apply-to-rectangle' as input.") (defun apply-on-rectangle (function start end &rest args) "Call FUNCTION for each line of rectangle with corners at START, END. FUNCTION is called with two arguments: the start and end columns of the rectangle, plus ARGS extra arguments. Point is at the beginning of line when the function is called. +Application of the FUNCTION is affected by the `*rectangle-skip-lines*'. The final point after the last operation will be returned." (save-excursion (let* ((cols (rectangle--pos-cols start end)) @@ -166,7 +170,14 @@ (goto-char startpt) (while (progn - (apply function startcol endcol args) + (when (cond + ((null *rectangle-skip-lines*) + t) + ((functionp *rectangle-skip-lines*) + (apply *rectangle-skip-lines* function start end args)) + (t + (/= (line-beginning-position) (line-end-position)))) + (apply function startcol endcol args)) (setq final-point (point)) (and (zerop (forward-line 1)) (bolp) (<= (point) endpt)))) On Mon, 30 Jan 2023 at 16:47, Constantin Kulikov wrote: > > --00000000000051955c05f37c2332 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Actually it must be named: "Make = `apply-on-rectangle' able to skip lines".
Reattaching the patch as .txt


--- rect.el 2023-01-30 14:18:22.542176710 +0300
++= + rect-patched.el 2023-01-30 15:44:14.953579566 +0300
@@ -143,12 +143,16= @@
=C2=A0 =C2=A0(rectangle--reset-point-crutches))
=C2=A0
=C2=A0;= ;; Rectangle operations.
+(defvar *rectangle-skip-lines* nil
+ =C2=A0= "If `t' -- skip empty lines, if `function' -- skip line if it = returns `nil'.
+The function gets all arguments of `apply-to-rectang= le' as input.")
=C2=A0
=C2=A0(defun apply-on-rectangle (func= tion start end &rest args)
=C2=A0 =C2=A0"Call FUNCTION for each= line of rectangle with corners at START, END.
=C2=A0FUNCTION is called = with two arguments: the start and end columns of the
=C2=A0rectangle, pl= us ARGS extra arguments.=C2=A0 Point is at the beginning of line when
= =C2=A0the function is called.
+Application of the FUNCTION is affected b= y the `*rectangle-skip-lines*'.
=C2=A0The final point after the last= operation will be returned."
=C2=A0 =C2=A0(save-excursion
=C2= =A0 =C2=A0 =C2=A0(let* ((cols (rectangle--pos-cols start end))
@@ -166,7= +170,14 @@
=C2=A0 =C2=A0 =C2=A0 =C2=A0(goto-char startpt)
=C2=A0 =C2= =A0 =C2=A0 =C2=A0(while
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(progn<= br>- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(apply function startcol endc= ol args)
+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(when (cond
+ = =C2=A0 ((null *rectangle-skip-lines*)
+ t)
+ =C2=A0 ((functi= onp *rectangle-skip-lines*)
+ (apply *rectangle-skip-lines* function= start end args))
+ =C2=A0 (t
+ (/=3D (line-beginning-positio= n) (line-end-position))))
+ =C2=A0(apply function startcol endcol arg= s))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq final-point (p= oint))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and (zerop (forw= ard-line 1)) (bolp)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (<=3D (point) endpt))))


On Mon, 30 J= an 2023 at 16:47, Constantin Kulikov <zxnotdead@gmail.com> wrote:

--00000000000051955c05f37c2332-- --00000000000051955f05f37c2334 Content-Type: text/plain; charset="US-ASCII"; name="rect.el.patch.txt" Content-Disposition: attachment; filename="rect.el.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ldiwrv1b0 LS0tIHJlY3QuZWwJMjAyMy0wMS0zMCAxNDoxODoyMi41NDIxNzY3MTAgKzAzMDAKKysrIHJlY3Qt cGF0Y2hlZC5lbAkyMDIzLTAxLTMwIDE1OjQ0OjE0Ljk1MzU3OTU2NiArMDMwMApAQCAtMTQzLDEy ICsxNDMsMTYgQEAKICAgKHJlY3RhbmdsZS0tcmVzZXQtcG9pbnQtY3J1dGNoZXMpKQogCiA7Ozsg UmVjdGFuZ2xlIG9wZXJhdGlvbnMuCisoZGVmdmFyICpyZWN0YW5nbGUtc2tpcC1saW5lcyogbmls CisgICJJZiBgdCcgLS0gc2tpcCBlbXB0eSBsaW5lcywgaWYgYGZ1bmN0aW9uJyAtLSBza2lwIGxp bmUgaWYgaXQgcmV0dXJucyBgbmlsJy4KK1RoZSBmdW5jdGlvbiBnZXRzIGFsbCBhcmd1bWVudHMg b2YgYGFwcGx5LXRvLXJlY3RhbmdsZScgYXMgaW5wdXQuIikKIAogKGRlZnVuIGFwcGx5LW9uLXJl Y3RhbmdsZSAoZnVuY3Rpb24gc3RhcnQgZW5kICZyZXN0IGFyZ3MpCiAgICJDYWxsIEZVTkNUSU9O IGZvciBlYWNoIGxpbmUgb2YgcmVjdGFuZ2xlIHdpdGggY29ybmVycyBhdCBTVEFSVCwgRU5ELgog RlVOQ1RJT04gaXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogdGhlIHN0YXJ0IGFuZCBlbmQg Y29sdW1ucyBvZiB0aGUKIHJlY3RhbmdsZSwgcGx1cyBBUkdTIGV4dHJhIGFyZ3VtZW50cy4gIFBv aW50IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZSB3aGVuCiB0aGUgZnVuY3Rpb24gaXMgY2Fs bGVkLgorQXBwbGljYXRpb24gb2YgdGhlIEZVTkNUSU9OIGlzIGFmZmVjdGVkIGJ5IHRoZSBgKnJl Y3RhbmdsZS1za2lwLWxpbmVzKicuCiBUaGUgZmluYWwgcG9pbnQgYWZ0ZXIgdGhlIGxhc3Qgb3Bl cmF0aW9uIHdpbGwgYmUgcmV0dXJuZWQuIgogICAoc2F2ZS1leGN1cnNpb24KICAgICAobGV0KiAo KGNvbHMgKHJlY3RhbmdsZS0tcG9zLWNvbHMgc3RhcnQgZW5kKSkKQEAgLTE2Niw3ICsxNzAsMTQg QEAKICAgICAgIChnb3RvLWNoYXIgc3RhcnRwdCkKICAgICAgICh3aGlsZQogICAgICAgICAgIChw cm9nbgotICAgICAgICAgICAgKGFwcGx5IGZ1bmN0aW9uIHN0YXJ0Y29sIGVuZGNvbCBhcmdzKQor ICAgICAgICAgICAgKHdoZW4gKGNvbmQKKwkJCQkgICAoKG51bGwgKnJlY3RhbmdsZS1za2lwLWxp bmVzKikKKwkJCQkJdCkKKwkJCQkgICAoKGZ1bmN0aW9ucCAqcmVjdGFuZ2xlLXNraXAtbGluZXMq KQorCQkJCQkoYXBwbHkgKnJlY3RhbmdsZS1za2lwLWxpbmVzKiBmdW5jdGlvbiBzdGFydCBlbmQg YXJncykpCisJCQkJICAgKHQKKwkJCQkJKC89IChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikgKGxp bmUtZW5kLXBvc2l0aW9uKSkpKQorCQkJICAoYXBwbHkgZnVuY3Rpb24gc3RhcnRjb2wgZW5kY29s IGFyZ3MpKQogICAgICAgICAgICAgKHNldHEgZmluYWwtcG9pbnQgKHBvaW50KSkKICAgICAgICAg ICAgIChhbmQgKHplcm9wIChmb3J3YXJkLWxpbmUgMSkpIChib2xwKQogICAgICAgICAgICAgICAg ICAoPD0gKHBvaW50KSBlbmRwdCkpKSkK --00000000000051955f05f37c2334--