[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CC Mode and electric-pair "problem".
From: |
Stefan Monnier |
Subject: |
Re: CC Mode and electric-pair "problem". |
Date: |
Wed, 20 Jun 2018 10:16:05 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
> How about this idea: we add a new syntax flag to Emacs, ", which
> terminates any open string, the same way the syntax > terminates any
> open comment. We could then set this syntax flag on newline.
To me this looks like adding a hack to patch over another.
I don't think the new behavior of unclosed strings in CC-mode is worse
than the old one, but I don't think it's really better either: it's just
different (in some cases it's better in others it's worse).
So the problem I see with it is that it brings complexity in the code
with no real improvement in terms of behavior. The bad-interaction with
electric-pair shows that this complexity has a real immediate cost.
The suggestion above suggests that this complexity may bring in yet
more complexity.
Me not happy.
If the purpose of the change is to address use cases such as Clément's:
> Sorry for jumping in a bit late. Does that mean that after the changed an
> unclosed quote will only cause refontification up to the end of the line?
> That would be a very nice improvement. I don't use electric-pair-mode, and
> as things currently stand inserting an unmatched quote applies
> font-lock-string-face to the entire buffer, which is a bit annoying.
How 'bout taking an approach that will have much fewer side-effects:
Instead of adding the complexity at the low-level of syntax-tables
to make strings "magically" terminate at EOL, hook into
self-insert-command:
when inserting a ", add a matching " at EOL if needed, or remove
the " that we added at EOL earlier.
Something like (guaranteed 100% tested, of course. No animals were harmed):
(add-hook 'post-self-insert-hook
(lambda ()
(when (memq last-command-event '(?\" ?\'))
(save-excursion
(let ((pos (point))
(ppss (syntax-ppss (line-end-position))))
(when (and (nth 3 ppss) ;; EOL within a string
(not (nth 5 ppss))) ;; EOL not escaped
(if (and (> (point) pos)
(eq last-command-event (char-before)))
;; Remove extraneous unmatched " at EOL.
(delete-region (1- (point)) (point))
(insert last-command-event)))))))
'append 'local)
I used `append` to try and make it interact better with electric-pair-mode.
Stefan
- Re: CC Mode and electric-pair "problem"., (continued)
- Re: CC Mode and electric-pair "problem"., Clément Pit-Claudel, 2018/06/20
- Fontifying unterminated strings [was: CC Mode and electric-pair "problem".], Alan Mackenzie, 2018/06/26
- Re: Fontifying unterminated strings [was: CC Mode and electric-pair "problem".], João Távora, 2018/06/26
- Re: Fontifying unterminated strings [was: CC Mode and electric-pair "problem".], Stefan Monnier, 2018/06/28
- Re: Fontifying unterminated strings [was: CC Mode and electric-pair "problem".], Stefan Monnier, 2018/06/28
- Re: CC Mode and electric-pair "problem"., Stephen Leake, 2018/06/18
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/18
- Re: CC Mode and electric-pair "problem"., Clément Pit-Claudel, 2018/06/18
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/19
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/19
- Re: CC Mode and electric-pair "problem".,
Stefan Monnier <=
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/26
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/27
- Re: CC Mode and electric-pair "problem"., Stefan Monnier, 2018/06/28
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/30
- Re: CC Mode and electric-pair "problem"., Stefan Monnier, 2018/06/30
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/27
- Re: CC Mode and electric-pair "problem"., Stefan Monnier, 2018/06/29
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/30
- Re: CC Mode and electric-pair "problem"., Eli Zaretskii, 2018/06/30
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/30