GNU bug report logs - #66155
'electric-pair-inhibit-if-helps-balance' has side-effects

Previous Next

Package: emacs;

Reported by: Akib Azmain Turja <akib <at> disroot.org>

Date: Fri, 22 Sep 2023 11:53:01 UTC

Severity: normal

Full log


Message #8 received at 66155 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Akib Azmain Turja <akib <at> disroot.org>
Cc: Daniel Mendler <mail <at> daniel-mendler.de>, 66155 <at> debbugs.gnu.org
Subject: Re: bug#66155: 'electric-pair-inhibit-if-helps-balance' has
 side-effects
Date: Sun, 1 Oct 2023 01:09:49 -0700
Akib Azmain Turja <akib <at> disroot.org> writes:

> With the default configuration (which uses
> 'electric-pair-inhibit-if-helps-balance'), inserting parens at the end
> of a Tempel field doesn't extend the field.
>
> I think the modify+undo magic in electric-pair-inhibit-if-helps-balance
> moves markers.
>
> The following is the solution that works for me atleast; it uses insert
> to insert back the character, and let-bind buffer-undo-list to not
> clobber the undo list.
>
> (defun *electric-pair-inhibit-if-helps-balance (char)
>   "Return non-nil if auto-pairing of CHAR would hurt parens' balance.
>
> Works by first removing the character from the buffer, then doing
> some list calculations, finally restoring the situation as if nothing
> happened."
>   (pcase (electric-pair-syntax-info char)
>     (`(,syntax ,pair ,_ ,s-or-c)
>      (let ((buffer-undo-list t))
>        ;; Don't use `delete-char'; that may modify the head of the
>        ;; undo list.
>        (delete-region (point) (1- (point)))
>        (let ((ret
>               (cond
>                ((eq ?\( syntax)
>                 (let* ((pair-data
>                         (electric-pair--balance-info 1 s-or-c))
>                        (outermost (cdr pair-data)))
>                   (cond ((car outermost)
>                          nil)
>                         (t
>                          (eq (cdr outermost) pair)))))
>                ((eq syntax ?\")
>                 (electric-pair--unbalanced-strings-p char)))))
>          (insert (string char))
>          ret)))))

Could you please send the patch as an attachment instead?  We prefer
that patches are created with a command like `git format-patch -1'.

Please also include:

- The bug number of this bug in the commit message, like so: Bug#66155

- A ChangeLog entry, as described in the file CONTRIBUTE.

That would make it easier for us to review and hopefully install
this patch.  Thanks in advance.




This bug report was last modified 1 year and 316 days ago.

Previous Next


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