I *think* I've fixed this, but it's complicated. Also I could be completely wrong. For what it's worth, I can reproduce the bug without the patch and cannot with the patch, which see attached. `electric-pair--with-uncached-syntax` hides `syntax-propertize-function`, and `mhtml-mode` uses `syntax-propertize-function`. AFAIU, let-binding `syntax-propertize-function` may or may not clear the cached syntax applied by said function, leading to the current heisenbug. If this sounds sensible, then a slightly different patch is needed, because `electric-pair--with-uncached-syntax` is used in some contexts where hiding `syntax-propertize-function` is the correct behavior. See second attached patch for an attempt at this approach. +Noam Postavsky since they added `electric-pair--with-uncached-syntax` On Sun, Jun 26, 2022 at 1:41 AM Allen Li wrote: > On Thu, Dec 9, 2021 at 2:31 AM Allen Li wrote: > >> I have bisected this regression >> to 7fff418edf56244a1fcf54718523aa9b5cb3a854 >> >> I will cc Stefan on the miniscule chance he still remembers anything >> about this and can save me time. >> Otherwise, I will see if I can pinpoint the regression (or if I messed up >> the bisect). >> > > Posting an update (or non-update) on this. This regression did seem to be > introduced by 7fff418edf56244a1fcf54718523aa9b5cb3a854, however I'm pretty > sure there's nothing wrong with the commit itself, it's just that jiggling > the code around made this regression reliably occur. > > >> >> Author: Stefan Monnier >> Date: Fri Nov 29 11:51:48 2019 -0500 >> * lisp/textmodes/mhtml-mode.el: Fix bug#38372 >> >> The `sgml-syntax-propertize-rules` rely on the >> `sgml--syntax-propertize-ppss` >> setup by `sgml-syntax-propertize` so it is not correct/safe to use >> them directly like html used to do. >> >> Change `sgml-syntax-propertize` so it can be used by mhtml, >> and then adjust mhtml-mode accordingly. >> >> * lisp/textmodes/mhtml-mode.el: Remove redundant `eval-and-compile`. >> Only require cl-lib at compile-time. >> (mhtml--syntax-propertize): New const, extracted from >> mhtml-syntax-propertize. >> (mhtml-syntax-propertize): Use `sgml-syntax-propertize`. >> >> * lisp/textmodes/sgml-mode.el (sgml--syntax-propertize): New const, >> extracted from sgml-syntax-propertize. >> (sgml-syntax-propertize): Add optional `rules-function` arg. >> lisp/textmodes/mhtml-mode.el | 44 >> ++++++++++++++++++++------------------------ >> lisp/textmodes/sgml-mode.el | 13 ++++++++----- >> 2 files changed, 28 insertions(+), 29 deletions(-) >> >> On Sun, Aug 1, 2021 at 10:41 AM Lars Ingebrigtsen wrote: >> >>> Allen Li writes: >>> >>> > Thus, I resorted to actually trying to understand the code. >>> >>> Darn, I hate it when that happens. >>> >>> > I've tracked down the bug to unexpected behavior from the `scan-sexps` >>> > call in this part of `electric-pair--balance-info`: >>> >>> I can reproduce exactly what you're seeing -- when edebugging, the >>> problem goes away, etc. >>> >>> I put a >>> >>> (redisplay t) >>> >>> into the function, and that also made the problem go away, but that's as >>> far as I've gotten so far. So the problem does indeed seem to be >>> something related to a cache/table somewhere not having been updated... >>> >>> -- >>> (domestic pets only, the antidote for overdose, milk.) >>> bloggy blog: http://lars.ingebrigtsen.no >>> >>