bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#50538: [PATCH] 28.0.50; electric-pair-mode fails to pair double quot


From: Jim Porter
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

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.

Attachment: 0001-Improve-behavior-of-electric-pair-mode-in-cc-mode.patch
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]