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 10:29:47 -0700

On 9/16/2021 10:04 AM, João Távora wrote:

I couldn't understand the initial issue fully, but I can only confirm
that the relationship between cc-mode and electric-pair-mode has been
rocky.  I think the situation is similar with electric-layout-mode and
with electric-indent-mode, to a certain degree (though I am not sure for
this last one).

Hopefully the following summary will help. My patch is essentially an enhancement of the patch from bug#36474. In that bug, Alan Mackenzie describes the problem:

Diagnosis: electric-pair--unbalanced-strings-p works after the (single)
newly typed " has been stripped from the buffer.  It attempts to
determine whether there are any open strings after the point of
insertion.  It does this by using parse-partial-sexp, and checks (nth 3
<result>) as evidence of an open string.

This does not work in CC Mode, since although there is an open string
marker (with a string fence syntax-table property on it) this is
"closed" (from parse-partial-sexp's point of view) by the string fence
property on the newline at the end of the line.
electric-pair--unbalanced-strings-p thus returns the wrong result.

The fix in that bug was to check if the just-inserted double-quote "is marked with a string fence syntax-table text property". That fixes the issue described in bug#36474, but it's not quite the right logic. CC Mode gives the *last* double-quote on a line the string fence property if a line has unbalanced quotes. Thus, the patch changes the behavior to check the last double-quote on the line, rather than the just-inserted double-quote.

The patch makes one other improvement as well: it doesn't check for the string fence property on a double-quote inside a comment. CC Mode doesn't apply string fence properties there, since it's not necessary. Therefore, inside a comment, `c-electric-pair-inhibit-predicate' just defers to the default value of `electric-pair-inhibit-predicate'.

As I mentioned earlier in the thread, this isn't quite perfect behavior, but it significantly improves the common case (`electric-pair-mode' with default or "default-like" settings). CC Mode's practice of closing strings at the end of a line - even without a closing quote - just doesn't play nicely with `electric-pair-mode', so barring some major changes to either CC Mode or `electric-pair-mode', I can't think of a way to improve this patch beyond where it's at now.





reply via email to

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