From: Alan Mackenzie <acm@muc.de>
To: Noam Postavsky <npostavs@gmail.com>
Cc: Amos Bird <amosbird@gmail.com>,
35316@debbugs.gnu.org, Zhang Haijun <ccsmile2008@outlook.com>
Subject: bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with iedit-mode on
Date: Sun, 19 May 2019 14:26:15 +0000 [thread overview]
Message-ID: <20190519142615.GB5262@ACM> (raw)
In-Reply-To: <877eamd1in.fsf@gmail.com>
Hello, Noam.
On Sun, May 19, 2019 at 09:20:16 -0400, Noam Postavsky wrote:
> Alan Mackenzie <acm@muc.de> writes:
> > (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
> > ""
> > - (let ((inhibit-modification-hooks t)
> > + (let (;; (inhibit-modification-hooks t)
> > + ;; Note: `inhibit-modification-hook' will already be non-nil when this
> > + ;; function is called. Setting it to nil here doesn't work.
> By "doesn't work", do you mean that it would trigger an infloop?
It would trigger a binding stack overflow. (It did when I tried it.)
iedit-update-occurrences-2 is (a subroutine of) the handler for the
modification-hooks property of the overlay at point. It performs buffer
modifications on the other overlays. If inhibit-modification-hooks is
bound to nil, these other modifications in their turn cause
iedit-update-occurrences-2 to get called recursively.
> Would something like this work:
> (defvar iedit-inhibit-update nil)
> (defun iedit-update-occurrences-2 (occurrence after beg end &optional change)
> ...
> ;; Let other modification hooks run, but don't recurse infinitely.
> (unless iedit-inhibit-update
> (let ((inhibit-modification-hooks nil)
> (iedit-inhibit-update t))
> ...
I haven't actually tried it, but gut feeling says this approach might be
problematic. It could end up inserting into/deleting from each overlay
many times. Or some of the insertions/deletions wouldn't get the change
hooks called for them, depending on how the rest of the code is split
into the two "..."s.
It might also be even less clean than the explicit calls to
before/after-change-functions.
> See also Bug#25111 "How modification-hooks let-bind
> inhibit-modification-hooks?" https://debbugs.gnu.org/25111
Thanks. I was considering raising the same issue in a bug myself.
#25111 is still open, I think (the web interface doesn't explicitly
say), and I think the doc is objectively wrong. It doesn't state that
when modification-hooks is called, inhibit-modification-hooks has
already been set to non-nil. That was what caught me out when I wrote
the previous (garbage) patch on ?Thursday.
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2019-05-19 14:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <5A24EADA-D920-4E1D-8CAE-511A6A74588C@outlook.com>
2019-04-19 0:22 ` bug#35316: 26.2; Emacs lags in c++-mode buffer when editing with iedit-mode on Zhang Haijun
2019-04-19 0:32 ` Zhang Haijun
2019-04-19 16:20 ` Stefan Monnier
2019-04-20 2:44 ` Zhang Haijun
2019-05-09 13:23 ` Zhang Haijun
2019-05-16 15:04 ` Alan Mackenzie
2019-05-16 15:46 ` Zhang Haijun
2019-05-16 16:17 ` Alan Mackenzie
2019-05-17 0:48 ` Zhang Haijun
2019-05-17 1:19 ` Amos Bird
2019-05-17 10:01 ` Alan Mackenzie
[not found] ` <20190517100118.GB5011@ACM>
2019-05-17 17:35 ` Amos Bird
2019-05-19 11:40 ` Alan Mackenzie
2019-05-19 13:20 ` Noam Postavsky
2019-05-19 14:26 ` Alan Mackenzie [this message]
2019-05-19 17:41 ` Noam Postavsky
2019-05-19 13:51 ` Zhang Haijun
2019-11-04 3:16 ` Zhang Haijun
2020-09-20 17:59 ` Lars Ingebrigtsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190519142615.GB5262@ACM \
--to=acm@muc.de \
--cc=35316@debbugs.gnu.org \
--cc=amosbird@gmail.com \
--cc=ccsmile2008@outlook.com \
--cc=npostavs@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.