[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CC Mode and electric-pair "problem".
From: |
João Távora |
Subject: |
Re: CC Mode and electric-pair "problem". |
Date: |
Tue, 19 Jun 2018 02:35:03 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (darwin) |
João Távora <address@hidden> writes:
>> It is what I said at the end of my previous post. e-p-m assumes that
>> whitespace has "neutral" syntax. When it doesn't (like here, with a
>> string-fence property), the scan-sexps doesn't work as desired. I'm
>> convinced this could be changed.
> OK. I'll have a look (I admit to not having looked at that code in depth
> since I wrote it 5 years ago). I was pretty much convinced it was
> flawless :-)
I looked at this code and decided its better to leave it. I don't need
it to fix the problem at hand. I may change this opinion, so I started
by pushing this change that we need regardless:
commit 6353387835f6cb34765ac525ac3e9edf3239e589
Electric-pair-mode lets modes choose how to skip whitespace
* lisp/elec-pair.el (electric-pair-skip-whitespace-function): New
buffer-local variable.
(electric-pair-post-self-insert-function): Call it.
Then, I defined this function
(defun c-mode-electric-skip-whitespace ()
"CC-mode's way of skipping whitespace."
(let ((saved (point))
(in-comment (nth 4 (syntax-ppss))))
;; actually if you also skip backslash here, you'll skip/chomp
;; over newline escapes, which may be nice.
(skip-chars-forward (apply #'string
electric-pair-skip-whitespace-chars))
(unless (or (not in-comment)
(nth 4 (syntax-ppss)))
(goto-char saved))))
And added this to c-mode-common-hook:
(add-hook 'c-mode-common-hook
(lambda ()
(setq-local electric-pair-skip-whitespace-function
#'c-mode-electric-skip-whitespace)
(add-function :around
(local 'electric-pair-skip-self)
(lambda (&rest r)
(let (terminator)
(if (and (setq terminator
(nth 3 (syntax-ppss)))
(save-excursion
(goto-char (1- (line-end-position)))
(and (eq terminator
(nth 3 (syntax-ppss)))
(not (eq terminator
(char-after))))))
t
(apply r)))))))
All e-p-m tests pass, though the detection of NL-terminated string is
very shady (but you probably have much better ways inside CC-mode to
detect them). If your "fix-scan-sexps" idea above works (I don't
understand it) then the add-function won't be needed at all.
Let me know what you think,
João
- Re: CC Mode and electric-pair "problem"., (continued)
- Re: CC Mode and electric-pair "problem"., Glenn Morris, 2018/06/18
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/18
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/18
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/18
- Re: CC Mode and electric-pair "problem"., Yuri Khan, 2018/06/18
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/18
- Re: CC Mode and electric-pair "problem"., Alan Mackenzie, 2018/06/18
- Re: CC Mode and electric-pair "problem"., João Távora, 2018/06/18
- Re: CC Mode and electric-pair "problem".,
João Távora <=
- Re: CC Mode and electric-pair "problem"., Stefan Monnier, 2018/06/18
- Re: CC Mode and electric-pair "problem"., Clément Pit-Claudel, 2018/06/18
- Re: CC Mode and electric-pair "problem"., Stefan Monnier, 2018/06/19
- 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