From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Zachary Kanfer Newsgroups: gmane.emacs.bugs Subject: bug#62892: proposal to extend mark-sexp to go forward and backward on command Date: Sun, 16 Apr 2023 22:25:28 -0400 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="00000000000025fc0005f97ee822" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3688"; mail-complaints-to="usenet@ciao.gmane.io" To: 62892@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Apr 17 04:26:14 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1poEZJ-0000pg-Fy for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 17 Apr 2023 04:26:13 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1poEZA-0001Yt-AD; Sun, 16 Apr 2023 22:26:04 -0400 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 1poEZ9-0001Yk-9J for bug-gnu-emacs@gnu.org; Sun, 16 Apr 2023 22:26:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1poEZ8-0006JZ-Tq for bug-gnu-emacs@gnu.org; Sun, 16 Apr 2023 22:26:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1poEZ8-0004Tr-JQ for bug-gnu-emacs@gnu.org; Sun, 16 Apr 2023 22:26:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Zachary Kanfer Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 17 Apr 2023 02:26:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 62892 X-GNU-PR-Package: emacs X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Original-Received: via spool by submit@debbugs.gnu.org id=B.168169834717199 (code B ref -1); Mon, 17 Apr 2023 02:26:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 17 Apr 2023 02:25:47 +0000 Original-Received: from localhost ([127.0.0.1]:52763 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1poEYt-0004TK-3Y for submit@debbugs.gnu.org; Sun, 16 Apr 2023 22:25:47 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:55796) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1poEYq-0004TC-Vd for submit@debbugs.gnu.org; Sun, 16 Apr 2023 22:25:45 -0400 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 1poEYq-0001Y9-M6 for bug-gnu-emacs@gnu.org; Sun, 16 Apr 2023 22:25:44 -0400 Original-Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1poEYo-0006GD-QX for bug-gnu-emacs@gnu.org; Sun, 16 Apr 2023 22:25:44 -0400 Original-Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-187e9f8c982so1650958fac.1 for ; Sun, 16 Apr 2023 19:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681698339; x=1684290339; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ZgqKstG7XEhetQnp74LSIkIOy/zgj8mIY23BBmWwljY=; b=KvamjZKkRj7Lg/PfUjsLjS2og7tWqExKQ+fYBu7mLV0xR6R8CtpySgZnjGBybqmhbP MaK9oPWXFYZpYrZSAU8fyQaOTxD5kL22LIWwJP2KWnPEwsNlO5kUm6hTkf4UN2ZRdvJS CI2fuLUfy759wasRNQAJPDpo8UzpbUEgu1Uj/UDwpHp9CKylOHdM0rU4Iu0gLKoFC26i EqMtDgfi/w7gEo+PdLNZn7cYXo4PoaVIErL7yoIu0oaMkzKDfwyDlYehk1uzY0M9vQVY 6tQ12XzPDf/BZf4CHXd+WHArKlSmM0eu6k5WVVdjyndBs7k46sVz/OHTzu55w9+3R9oM RDog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681698339; x=1684290339; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ZgqKstG7XEhetQnp74LSIkIOy/zgj8mIY23BBmWwljY=; b=ecNtLf46E3XKCYXDndcUCpqEHN9qTdGnywwlK6pt8UdG+jAqCauKO1VmDfzdZHYtx0 DKoQEglwd2ko6bvN4zjrYYwi2Gca34cggxmkGVI236/5o7g49Z3qlL0tf3sTGpOWbgjG VsKaUY7eaJUFjtZy2fwvOXU4wCBRdjxrhvdQT+T/NQix0S31safmU18wbDvYqEy4A8Am Fc+GgQktU3Tt7ZPanq+5QgdLTRcbNUFX7BUHUuCwNDFAVd/l+0L1jYzP5cv38Tn7mqxu eOxsVAyv5xYE2Ly4jnHZrKhDHzYRm88JX9fvbcozd+c+1+G0QyDa0G1i25taHPXFGUl7 i0Ig== X-Gm-Message-State: AAQBX9fBgylU3On9nyPq0IqdVwwqGm80aeblIBKidf0dAclSKGsMnX4k 5d1+BAvdfcxG6IOsONMokOCPy5ElAH8ItXqI/WLAW/CQ7EM= X-Google-Smtp-Source: AKy350ZHqA+LRArlyRV0rrZ0xHgSla7jAH+CiASi+wvXu3pXy0nsureYAZqxtDJ2iFhCYHExUiBX8B3mbUvhc4PSbqQ= X-Received: by 2002:a05:6870:b52c:b0:187:a080:bfd5 with SMTP id v44-20020a056870b52c00b00187a080bfd5mr4129099oap.3.1681698339533; Sun, 16 Apr 2023 19:25:39 -0700 (PDT) Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=zkanfer@gmail.com; helo=mail-oa1-x2f.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:260163 Archived-At: --00000000000025fc0005f97ee822 Content-Type: multipart/alternative; boundary="00000000000025fbfe05f97ee820" --00000000000025fbfe05f97ee820 Content-Type: text/plain; charset="UTF-8" C-M-@ is bound to `#'mark-sexp`. This command works incrementally -- that is, calling this once marks the sexp after point; calling it again marks one more sexp (in total, the two sexps after point). It would be convenient to easily be able to mark sexps backwards as well. If you've already marked sexps backwards, mark-sexp extends the region backwards. But if you haven't, the only way to mark backwards is to pass a negative prefix argument. It often is a better experience to iteratively select the sexps you want. Finally, there's no way to mark both directions, e.g., one sexp forward and two backwards. Attached is a patch to add #'mark-sexp-forwards and #'mark-sexp-backwards. These functions extend the region by sexps forward and backward. They are mutually incremental: you can call mark-sexp-fowards, then mark-sexp-backwards twice, then mark-sexp-forwards. After this, the region will consist of the two sexps before point and the two sexps after point. These functions are very similar to #'mark-sexp: - They will extend the region if it already exists. - They can be called from lisp code with a numeric argument. - They can take a prefix argument if called interactively. Thanks, Zachary Kanfer --00000000000025fbfe05f97ee820 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
C-M-@ is bound to `#'mark-sexp`. This command works in= crementally -- that is, calling this once marks the sexp after point; calli= ng it again marks one more sexp (in total, the two sexps after point).
<= br>It would be convenient to easily be able to mark sexps backwards as well= .

If you've already marked sexps backwards, mark-sexp extends th= e region backwards. But if you haven't, the only way to mark backwards = is to pass a negative prefix argument.

It often is a better experien= ce to iteratively select the sexps you want. Finally, there's no way to= mark both directions, e.g., one sexp forward and two backwards.

Att= ached is a patch to add #'mark-sexp-forwards and #'mark-sexp-backwa= rds. These functions extend the region by sexps forward and backward. They = are mutually incremental: you can call mark-sexp-fowards, then mark-sexp-ba= ckwards twice, then mark-sexp-forwards. After this, the region will consist= of the two sexps before point and the two sexps after point.

These = functions are very similar to #'mark-sexp:
- They will extend the re= gion if it already exists.
- They can be called from lisp code with a nu= meric argument.
- They can take a prefix argument if called interac= tively.

Thanks,
Zachary Kanfer
=
--00000000000025fbfe05f97ee820-- --00000000000025fc0005f97ee822 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Add-mark-sexp-forward-mark-sexp-backward.patch" Content-Disposition: attachment; filename="0001-Add-mark-sexp-forward-mark-sexp-backward.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lgk7oxye0 RnJvbSAzYTM1NzkwYTc5ZWZmM2Q1OTdlMTNhMTdkNzQwMzU3YmM1NTZkODFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBaYWNoYXJ5IEthbmZlciA8emthbmZlckBnbWFpbC5jb20+CkRh dGU6IFN1biwgMTYgQXByIDIwMjMgMjI6MTY6MzkgLTA0MDAKU3ViamVjdDogW1BBVENIXSBBZGQg bWFyay1zZXhwLWZvcndhcmQsIG1hcmstc2V4cC1iYWNrd2FyZAoKLS0tCiBldGMvTkVXUyAgICAg ICAgICAgICAgICB8ICA0ICsrKysKIGxpc3AvZW1hY3MtbGlzcC9saXNwLmVsIHwgNDEgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNDUg aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRjL05FV1MKaW5kZXggYzYx YTllYzNjNWYuLjlmMmI3ZDIxZjliIDEwMDY0NAotLS0gYS9ldGMvTkVXUworKysgYi9ldGMvTkVX UwpAQCAtODEsNiArODEsMTAgQEAgbWlzdGFrZW4gY29tcG9zaXRpb25zLCB0aGlzIHdpbGwgbm93 IHdvcmsgYXMgd2VsbC4KIFRoaXMgd29ya3MgbGlrZSAna2lsbC1tYXRjaGluZy1idWZmZXJzJywg YnV0IHdpdGhvdXQgYXNraW5nIGZvcgogY29uZmlybWF0aW9uLgogCistLS0KKyoqIE5ldyBjb21t YW5kcyAnbWFyay1zZXhwLWZvcndhcmQnIGFuZCAnbWFyay1zZXhwLWJhY2t3YXJkJy4KK1RoZXNl IHdvcmsgbGlrZSBtYXJrLXNleHAsIGJ1dCBleHBsaWNpdGx5IGFsbG93IHNleHBzIHRvIGJlIG1h cmtlZCBmb3J3YXJkIGFuZCBiYWNrd2FyZC4KKwogDAogKiBDaGFuZ2VzIGluIFNwZWNpYWxpemVk IE1vZGVzIGFuZCBQYWNrYWdlcyBpbiBFbWFjcyAzMC4xCiAKZGlmZiAtLWdpdCBhL2xpc3AvZW1h Y3MtbGlzcC9saXNwLmVsIGIvbGlzcC9lbWFjcy1saXNwL2xpc3AuZWwKaW5kZXggNDE3YzIxOGM2 ZDcuLmQ2NjQ5YjI0OTdkIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvbGlzcC5lbAorKysg Yi9saXNwL2VtYWNzLWxpc3AvbGlzcC5lbApAQCAtMTI5LDYgKzEyOSw0NyBAQCBtYXJrLXNleHAK IAkgICAgKHBvaW50KSkKIAkgIG5pbCB0KSkpKQogCisoZGVmdW4gbWFyay1zZXhwLWhlbHBlciAo bnVtYmVyLW9mLWV4cHJlc3Npb25zKQorICAiQSBoZWxwZXIgZnVuY3Rpb24gZm9yICdtYXJrLXNl eHAtW2ZvcndhcmQsIGJhY2t3YXJkXScuCisKK0lmIE5VTUJFUi1PRi1FWFBSRVNTSU9OUyBpcyBw b3NpdGl2ZSwgbWFyayB0aGF0IG1hbnkgc2V4cHMgZm9yd2FyZDsKK290aGVyd2lzZSwgYW1yayBi YWNrd2FyZC4iCisgIChpZiAodXNlLXJlZ2lvbi1wKQorICAgICAgKGxldCogKChmb3J3YXJkICg+ PSBudW1iZXItb2YtZXhwcmVzc2lvbnMgMCkpCisgICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1y ZWdpb24gKHJlZ2lvbi1iZWdpbm5pbmcpKQorICAgICAgICAgICAgIChlbmQtb2YtcmVnaW9uIChy ZWdpb24tZW5kKSkKKyAgICAgICAgICAgICAoYXQtZW5kLW9mLXJlZ2lvbiAoPSBlbmQtb2YtcmVn aW9uIChwb2ludCkpKQorICAgICAgICAgICAgIChuZXctYm9yZGVyLXBvaW50CisgICAgICAgICAg ICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAgICAgICAgICAgIChnb3RvLWNoYXIgKGlmIGZvcndh cmQgKHJlZ2lvbi1lbmQpIChyZWdpb24tYmVnaW5uaW5nKSkpCisgICAgICAgICAgICAgICAgKGNv bmRpdGlvbi1jYXNlIG5pbAorICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1zZXhwIG51bWJl ci1vZi1leHByZXNzaW9ucykKKyAgICAgICAgICAgICAgICAgIChzY2FuLWVycm9yICh1c2VyLWVy cm9yICJObyBtb3JlIHMtZXhwcmVzc2lvbnMgdGhlcmUhIikpKQorICAgICAgICAgICAgICAgIChw b2ludCkpKQorICAgICAgICAgICAgIChuZXctYmVnaW5uaW5nLW9mLXJlZ2lvbiAobWluIGJlZ2lu bmluZy1vZi1yZWdpb24gbmV3LWJvcmRlci1wb2ludCkpCisgICAgICAgICAgICAgKG5ldy1lbmQt b2YtcmVnaW9uIChtYXggZW5kLW9mLXJlZ2lvbiBuZXctYm9yZGVyLXBvaW50KSkpCisgICAgICAg IChnb3RvLWNoYXIgKGlmIGF0LWVuZC1vZi1yZWdpb24KKyAgICAgICAgICAgICAgICAgICAgICAg bmV3LWVuZC1vZi1yZWdpb24KKyAgICAgICAgICAgICAgICAgICAgIG5ldy1iZWdpbm5pbmctb2Yt cmVnaW9uKSkKKyAgICAgICAgKHNldC1tYXJrIChpZiBhdC1lbmQtb2YtcmVnaW9uCisgICAgICAg ICAgICAgICAgICAgICAgbmV3LWJlZ2lubmluZy1vZi1yZWdpb24KKyAgICAgICAgICAgICAgICAg ICAgbmV3LWVuZC1vZi1yZWdpb24pKSkKKyAgICAobWFyay1zZXhwIG51bWJlci1vZi1leHByZXNz aW9ucykpKQorCisoZGVmdW4gbWFyay1zZXhwLWZvcndhcmQgKCZvcHRpb25hbCBudW1iZXItb2Yt ZXhwcmVzc2lvbnMpCisgICJNYXJrIE5VTUJFUi1PRi1FWFBSRVNTSU9OUyBzLWV4cHJlc3Npb25z IGZvcndhcmQuCisKKyBSZXBlYXRlZCBjYWxscyB0byB0aGlzIG1hcmsgbW9yZSBzLWV4cHJlc3Np b25zLiIKKyAgKGludGVyYWN0aXZlICJwIikKKyAgKG1hcmstc2V4cC1oZWxwZXIgKG9yIG51bWJl ci1vZi1leHByZXNzaW9ucyAxKSkpCisKKyhkZWZ1biBtYXJrLXNleHAtYmFja3dhcmQgKCZvcHRp b25hbCBudW1iZXItb2YtZXhwcmVzc2lvbnMpCisgICJNYXJrIE5VTUJFUi1PRi1FWFBSRVNTSU9O UyBzLWV4cHJlc3Npb25zIGJhY2t3YXJkLgorCisgUmVwZWF0ZWQgY2FsbHMgdG8gdGhpcyBtYXJr IG1vcmUgcy1leHByZXNzaW9ucy4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChtYXJrLXNleHAt aGVscGVyICgtIChvciBudW1iZXItb2YtZXhwcmVzc2lvbnMgMSkpKSkKKwogKGRlZnVuIGZvcndh cmQtbGlzdCAoJm9wdGlvbmFsIGFyZyBpbnRlcmFjdGl2ZSkKICAgIk1vdmUgZm9yd2FyZCBhY3Jv c3Mgb25lIGJhbGFuY2VkIGdyb3VwIG9mIHBhcmVudGhlc2VzLgogVGhpcyBjb21tYW5kIHdpbGwg YWxzbyB3b3JrIG9uIG90aGVyIHBhcmVudGhlc2VzLWxpa2UgZXhwcmVzc2lvbnMKLS0gCjIuMzgu NAoK --00000000000025fc0005f97ee822--