GNU bug report logs - #49518
28.0.50; electric-pair-mode skip-self fails for single-quotes in python-mode

Previous Next

Package: emacs;

Reported by: Jim Porter <jporterbugs <at> gmail.com>

Date: Sun, 11 Jul 2021 01:33:01 UTC

Severity: normal

Found in version 28.0.50

Done: João Távora <joaotavora <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Jim Porter <jporterbugs <at> gmail.com>
To: Daniel Fleischer <danflscr <at> gmail.com>
Cc: 49518 <at> debbugs.gnu.org, Stephen Berman <stephen.berman <at> gmx.net>, João Távora <joaotavora <at> gmail.com>
Subject: bug#49518: 28.0.50; electric-pair-mode skip-self fails for single-quotes in python-mode
Date: Sat, 18 Sep 2021 09:56:17 -0700
(CCing João since he wanted to hear about `electric-pair-mode' issues[1].)

On 9/18/2021 5:55 AM, Daniel Fleischer wrote:
> Jim Porter [2021-07-11 Sun 10:34] wrote:
> 
>> That's true, and I've been working on a patch to make that behavior
>> more robust. The code for that is in
>> `python-electric-pair-string-delimiter', but I think an improved
>> implementation of that would depend on how this bug is fixed. I have a
>> local patch that works for me, but it depends on the other
>> electric-pair settings I use, so it couldn't merge as-is.
> 
> As I'm also bothered by this, is there some resolution?
> 
> BTW, my solution is hooking this code in 'inferior-python-mode':
> 
> (setq-local electric-pair-pairs
>              (append electric-pair-pairs '((?' . ?'))))

This isn't the right fix in general, but maybe it will help you. It 
works for me because I turn off `electric-pair-mode' inside comments and 
strings, but with the default configuration, it will pair single-quotes 
inside double-quoted strings (i.e. you won't be able to type an 
apostrophe). There's probably a more robust solution, but I haven't had 
time to investigate further...

----------------------------------------

  (defun user--python-electric-pair-string-delimiter ()
    (when (and electric-pair-mode
               (memq last-command-event '(?\" ?'))
               (let ((count 0))
                 (while (eq (char-before (- (point) count)) 
last-command-event)
                   (cl-incf count))
                 (= count 3)))
      (save-excursion (insert (make-string 3 last-command-event)))))

  (defun user--electric-pair-python-hook ()
    (setq-local electric-pair-text-syntax-table python-mode-syntax-table))

  (advice-add #'python-electric-pair-string-delimiter
              :override #'user--python-electric-pair-string-delimiter)
  (add-hook 'python-mode-hook #'user--electric-pair-python-hook)

----------------------------------------

[1] https://lists.gnu.org/archive/html/emacs-devel/2021-09/msg01313.html




This bug report was last modified 3 years and 246 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.