From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jim Porter Newsgroups: gmane.emacs.bugs Subject: bug#50538: [PATCH] 28.0.50; electric-pair-mode fails to pair double quotes in some cases in CC mode Date: Thu, 16 Sep 2021 14:36:06 -0700 Message-ID: <456ed31d-77dc-cc2d-2fe9-8fcd379e04c6@gmail.com> References: <021853bf-0169-c158-ab3d-296b6c144e08@gmail.com> <83r1dufgxu.fsf@gnu.org> <94c7b4ec-813b-515f-d947-116c294dd74b@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------2078361F0C2C0B09047F0A56" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37171"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 50538@debbugs.gnu.org To: Alan Mackenzie Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Sep 16 23:37:20 2021 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 1mQz4J-0009XY-A3 for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 16 Sep 2021 23:37:19 +0200 Original-Received: from localhost ([::1]:33626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQz4H-0003EL-Hr for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 16 Sep 2021 17:37:17 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54214) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQz41-0003Cp-Tc for bug-gnu-emacs@gnu.org; Thu, 16 Sep 2021 17:37:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:45200) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQz41-00024u-Lp for bug-gnu-emacs@gnu.org; Thu, 16 Sep 2021 17:37:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mQz41-0008PN-JR for bug-gnu-emacs@gnu.org; Thu, 16 Sep 2021 17:37:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Jim Porter Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 16 Sep 2021 21:37:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 50538 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 50538-submit@debbugs.gnu.org id=B50538.163182817732244 (code B ref 50538); Thu, 16 Sep 2021 21:37:01 +0000 Original-Received: (at 50538) by debbugs.gnu.org; 16 Sep 2021 21:36:17 +0000 Original-Received: from localhost ([127.0.0.1]:56746 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mQz3J-0008O0-7b for submit@debbugs.gnu.org; Thu, 16 Sep 2021 17:36:17 -0400 Original-Received: from mail-pl1-f180.google.com ([209.85.214.180]:33298) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mQz3G-0008Nf-5t for 50538@debbugs.gnu.org; Thu, 16 Sep 2021 17:36:15 -0400 Original-Received: by mail-pl1-f180.google.com with SMTP id t4so4824746plo.0 for <50538@debbugs.gnu.org>; Thu, 16 Sep 2021 14:36:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:mime-version :in-reply-to:content-language; bh=GcXevKWji7YMKsLJUWZwOwiGgpQtNPT2iTGbbq6MGes=; b=HYdSDLyhb7bqSKYmj0BrB3uP2flag7eqPt78xodSpOzbPxSeuBc8ThTzeImYEAGNdT xOSU52UIdJopKFC610v2G2FNR9TtcuN6BNQwRXjBS4gvLIqQvF/XrdohI/YmLEBrAMWJ LShM+0+0yRBE+kwViqhLdGqsDdLHuDm0WTXZ85BT2zqsTs2w7vqSIOsI4wcV81d6qnuG VPrh1qeLWWW/Tlr8JWEK5MNYLu61K+yjzMZbc5/463QKkVfxvSPqO8Bjvjed1xlwAKyb znCeGAfmtoFKMZkGYFwvRVXfZsczZAK2JkMCkzWliCWEmI2c3DtfOkUxHqpmV7b1F0o9 QY8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :mime-version:in-reply-to:content-language; bh=GcXevKWji7YMKsLJUWZwOwiGgpQtNPT2iTGbbq6MGes=; b=BmB99wX1AawebtRW0+58Ib0v7637y6a39Bgr94/Iu4Kk3ItpP0j8hpqUhUkxlD8NVo mqAOWS+Pik+MkjUjVowEzPUtGrJde6bwUyasbwn6WBWLpXHyFuYdF/js2LWt3PvXzFnV TZMoGxbipotA1jVqgdiHMXUFe0J+p7A/u33IV2GRKSYwaL+c3sSKS/wEutfj10vzAdVt OxRhOtAWX5wmWvgcq++RyraO/7Due2aIdXNWZynajxJS2EX9wQgh0GCd2oRoNy0bA+Hi B14F3S6FFT0FSDAuc35pFkdln0gDxUnHOwxJ50ECqVAO6WgHSk9tkjOZRBFf4d9ZTPNQ UqDw== X-Gm-Message-State: AOAM533m3CZcX/HTEpMEHUPmUO6wCGCabegKbTdgp72oz8Rkidf4UmSR ec1X2YTegT50j6vhKvbNWM4dL4AsKv4= X-Google-Smtp-Source: ABdhPJxvo5QOrdXoLvsqTc+whpBj/3HXyOMnw3jW/mBlOz+F6YCOnGmdml1KneVpZzIOGYPp0hYeGg== X-Received: by 2002:a17:902:8488:b029:129:97e8:16e7 with SMTP id c8-20020a1709028488b029012997e816e7mr6495109plo.39.1631828168108; Thu, 16 Sep 2021 14:36:08 -0700 (PDT) Original-Received: from [192.168.1.2] (cpe-76-168-148-233.socal.res.rr.com. [76.168.148.233]) by smtp.googlemail.com with ESMTPSA id u9sm4141015pgp.83.2021.09.16.14.36.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 16 Sep 2021 14:36:07 -0700 (PDT) In-Reply-To: Content-Language: en-US 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" Xref: news.gmane.io gmane.emacs.bugs:214509 Archived-At: This is a multi-part message in MIME format. --------------2078361F0C2C0B09047F0A56 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 9/16/2021 1:49 PM, Alan Mackenzie wrote: > There were two or three minor problems with the patch: > > 1-/. CC Mode doesn't use syntax-ppss at all. This was because way back > when, syntax-ppss was buggy, and even now doesn't do the right thing for > CC Mode in some edge cases (e.g. with the buffer narrowed and point-min > inside a string or comment). Instead it uses its own internal syntactic > cacheing, largely centred around the function c-semi-pp-to-literal. > > 2/- Rather than using get-text-property and friends directly, CC Mode > uses the macros c-get-char-property, etc. This is (?was) to maintain > compatibility with XEmacs. > > 3/- (A bit more serious) The patch looks for the last " in the current > line without taking account of any escaped new lines. There is already > a CC Mode macro which does all the work here, c-point, which can be given > the argument 'eoll for "end of logical line". Thanks, I've incorporated all these changes into the attached patch. The only difference between my patch and the version you provided was to keep the `(search-backward "\"")' portion from my patch, since the code needs to find the last double-quote, not the end of line. As an aside, it's probably worth explaining why my patch searches for the last double-quote in the first place. As far as I understand CC Mode, when there's an unterminated double-quote on a line, both the quote and the newline have a string fence property applied to them. This means we could check the newline for that property, *but* there's no guarantee a newline actually exists: `(c-point 'eoll)' could actually point to the end of the buffer. To get around that, we search backwards for the last double-quote of the (logical) line, since that's guaranteed to exist. If we wanted to, we could avoid searching backwards for the last double-quote when a newline exists, but I'm not sure the gain in performance (likely very small) is worth the extra code complexity. --------------2078361F0C2C0B09047F0A56 Content-Type: text/plain; charset=UTF-8; name="0001-Improve-behavior-of-electric-pair-mode-in-cc-mode.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-Improve-behavior-of-electric-pair-mode-in-cc-mode.patch" RnJvbSA0NzU5ZWQwYzhmYTdmYThmYWZkNDdkMTY2YjNmMTI2ZTYwNmZmZTg0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMTYgU2VwIDIwMjEgMTQ6MzI6MTcgLTA3MDAKU3ViamVjdDogW1BB VENIXSBJbXByb3ZlIGJlaGF2aW9yIG9mICdlbGVjdHJpYy1wYWlyLW1vZGUnIGluICdjYy1t b2RlJwoKVGhpcyBlbnN1cmVzIHRoYXQgcXVvdGVzIGFyZSBwYWlyZWQgY29ycmVjdGx5IHdp dGhpbiBjb21tZW50cywgYWxsb3dzIGZvcgppbnNlcnRpb24gb2YgcXVvdGUgcGFpcnMgaW1t ZWRpYXRlbHkgYmVmb3JlIGFub3RoZXIgcXVvdGUsIGFuZCBhbGxvd3MKaW5zZXJ0aW5nIHF1 b3RlIHBhaXJzIHdpdGhpbiBhIHN0cmluZyAodGh1cyBzcGxpdHRpbmcgdGhlIHN0cmluZyBp biB0d28pLgoKKiBsaXNwL3Byb2dtb2Rlcy9jYy1tb2RlLmVsIChjLWVsZWN0cmljLXBhaXIt aW5oaWJpdC1wcmVkaWNhdGUpOgpJbmhpYml0IGluc2VydGlvbiBvZiBwYWlyZWQgcXVvdGUg aW4gZmV3ZXIgY2FzZXMuCiogdGVzdC9saXNwL2VsZWN0cmljLXRlc3RzLmVsIChkZWZpbmUt ZWxlY3RyaWMtcGFpci10ZXN0KToKQWRkICdjLW1vZGUnIHRvIGxpc3Qgb2YgbW9kZXMgdG8g dGVzdCBieSBkZWZhdWx0LgotLS0KIGxpc3AvcHJvZ21vZGVzL2NjLW1vZGUuZWwgICB8IDIy ICsrKysrKysrKysrKysrKy0tLS0tLS0KIHRlc3QvbGlzcC9lbGVjdHJpYy10ZXN0cy5lbCB8 ICA1ICsrKystCiAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlzcC9wcm9nbW9kZXMvY2MtbW9kZS5lbCBiL2xpc3Av cHJvZ21vZGVzL2NjLW1vZGUuZWwKaW5kZXggMDU3ZDI5MjI0Ni4uNjBjZWEwYjg1OCAxMDA2 NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvY2MtbW9kZS5lbAorKysgYi9saXNwL3Byb2dtb2Rl cy9jYy1tb2RlLmVsCkBAIC0yNTUwLDE4ICsyNTUwLDI2IEBAIGMtZWxlY3RyaWMtcGFpci1p bmhpYml0LXByZWRpY2F0ZQogCiBBdCB0aGUgdGltZSBvZiBjYWxsLCBwb2ludCBpcyBqdXN0 IGFmdGVyIHRoZSBuZXdseSBpbnNlcnRlZCBDSEFSLgogCi1XaGVuIENIQVIgaXMgXCIsIHQg d2lsbCBiZSByZXR1cm5lZCB1bmxlc3MgdGhlIFwiIGlzIG1hcmtlZCB3aXRoCi1hIHN0cmlu ZyBmZW5jZSBzeW50YXgtdGFibGUgdGV4dCBwcm9wZXJ0eS4gIEZvciBvdGhlciBjaGFyYWN0 ZXJzLAotdGhlIGRlZmF1bHQgdmFsdWUgb2YgYGVsZWN0cmljLXBhaXItaW5oaWJpdC1wcmVk aWNhdGUnIGlzIGNhbGxlZAotYW5kIGl0cyB2YWx1ZSByZXR1cm5lZC4KK1doZW4gQ0hBUiBp cyBcIiBhbmQgbm90IHdpdGhpbiBhIGNvbW1lbnQsIHQgd2lsbCBiZSByZXR1cm5lZCBpZgor dGhlIHF1b3RlcyBvbiB0aGUgY3VycmVudCBsaW5lIGFyZSBhbHJlYWR5IGJhbGFuY2VkIChp LmUuIGlmIHRoZQorbGFzdCBcIiBpcyBub3QgbWFya2VkIHdpdGggYSBzdHJpbmcgZmVuY2Ug c3ludGF4LXRhYmxlIHRleHQKK3Byb3BlcnR5KS4gIEZvciBvdGhlciBjYXNlcywgdGhlIGRl ZmF1bHQgdmFsdWUgb2YKK2BlbGVjdHJpYy1wYWlyLWluaGliaXQtcHJlZGljYXRlJyBpcyBj YWxsZWQgYW5kIGl0cyB2YWx1ZQorcmV0dXJuZWQuCiAKIFRoaXMgZnVuY3Rpb24gaXMgdGhl IGFwcHJvcHJpYXRlIHZhbHVlIG9mCiBgZWxlY3RyaWMtcGFpci1pbmhpYml0LXByZWRpY2F0 ZScgZm9yIENDIE1vZGUgbW9kZXMsIHdoaWNoIG1hcmsKIGludmFsaWQgc3RyaW5ncyB3aXRo IHN1Y2ggYSBzeW50YXggdGFibGUgdGV4dCBwcm9wZXJ0eSBvbiB0aGUKIG9wZW5pbmcgXCIg YW5kIHRoZSBuZXh0IHVuZXNjYXBlZCBlbmQgb2YgbGluZS4iCi0gIChpZiAoZXEgY2hhciA/ XCIpCi0gICAgICAobm90IChlcXVhbCAoZ2V0LXRleHQtcHJvcGVydHkgKDEtIChwb2ludCkp ICdjLWZsLXN5bi10YWIpICcoMTUpKSkKLSAgICAoZnVuY2FsbCAoZGVmYXVsdC12YWx1ZSAn ZWxlY3RyaWMtcGFpci1pbmhpYml0LXByZWRpY2F0ZSkgY2hhcikpKQorICAob3IgKGFuZCAo ZXEgY2hhciA/XCIpCisJICAgKG5vdCAobWVtcSAoY2FkciAoYy1zZW1pLXBwLXRvLWxpdGVy YWwgKDEtIChwb2ludCkpKSkgJyhjIGMrKykpKQorCSAgIChsZXQgKChsYXN0LXF1b3RlIChz YXZlLW1hdGNoLWRhdGEKKwkJCSAgICAgICAoc2F2ZS1leGN1cnNpb24KKwkJCQkgKGdvdG8t Y2hhciAoYy1wb2ludCAnZW9sbCkpCisJCQkJIChzZWFyY2gtYmFja3dhcmQgIlwiIikpKSkp CisJICAgICAobm90IChlcXVhbCAoYy1nZXQtY2hhci1wcm9wZXJ0eSBsYXN0LXF1b3RlICdj LWZsLXN5bi10YWIpCisJCQkgJygxNSkpKSkpCisgICAgICAoZnVuY2FsbCAoZGVmYXVsdC12 YWx1ZSAnZWxlY3RyaWMtcGFpci1pbmhpYml0LXByZWRpY2F0ZSkgY2hhcikpKQogCiAMCiA7 OyBTdXBwb3J0IGZvciBDCmRpZmYgLS1naXQgYS90ZXN0L2xpc3AvZWxlY3RyaWMtdGVzdHMu ZWwgYi90ZXN0L2xpc3AvZWxlY3RyaWMtdGVzdHMuZWwKaW5kZXggNjY2ZGU4OWM1My4uMzU1 MTZhOWYwYiAxMDA2NDQKLS0tIGEvdGVzdC9saXNwL2VsZWN0cmljLXRlc3RzLmVsCisrKyBi L3Rlc3QvbGlzcC9lbGVjdHJpYy10ZXN0cy5lbApAQCAtMzIsNiArMzIsOSBAQAogKHJlcXVp cmUgJ2VsZWMtcGFpcikKIChyZXF1aXJlICdjbC1saWIpCiAKKzs7IFdoZW4gcnVubmluZyB0 ZXN0cyBpbiBjLW1vZGUsIHVzZSBzaW5nbGUtbGluZSBjb21tZW50cyAoLy8pLgorKGFkZC1o b29rICdjLW1vZGUtaG9vayAobGFtYmRhICgpIChjLXRvZ2dsZS1jb21tZW50LXN0eWxlIC0x KSkpCisKIChkZWZ1biBjYWxsLXdpdGgtc2F2ZWQtZWxlY3RyaWMtbW9kZXMgKGZuKQogICAo bGV0ICgoc2F2ZWQtZWxlY3RyaWMgKGlmIGVsZWN0cmljLXBhaXItbW9kZSAxIC0xKSkKICAg ICAgICAgKHNhdmVkLWxheW91dCAoaWYgZWxlY3RyaWMtbGF5b3V0LW1vZGUgMSAtMSkpCkBA IC0xNzMsNyArMTc2LDcgQEAgZGVmaW5lLWVsZWN0cmljLXBhaXItdGVzdAogICAgICAgICAg IGV4cGVjdGVkLXN0cmluZwogICAgICAgICAgIGV4cGVjdGVkLXBvaW50CiAgICAgICAgICAg YmluZGluZ3MKLSAgICAgICAgICAobW9kZXMgJyhxdW90ZSAocnVieS1tb2RlIGpzLW1vZGUp KSkKKyAgICAgICAgICAobW9kZXMgJyhxdW90ZSAocnVieS1tb2RlIGpzLW1vZGUgYy1tb2Rl KSkpCiAgICAgICAgICAgKHRlc3QtaW4tY29tbWVudHMgdCkKICAgICAgICAgICAodGVzdC1p bi1zdHJpbmdzIHQpCiAgICAgICAgICAgKHRlc3QtaW4tY29kZSB0KQotLSAKMi4yNS4xCgo= --------------2078361F0C2C0B09047F0A56--