[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Unbalanced change hooks (part 1)
From: |
Eli Zaretskii |
Subject: |
Re: Unbalanced change hooks (part 1) |
Date: |
Tue, 02 Aug 2016 05:34:22 +0300 |
> From: Richard Copley <address@hidden>
> Date: Mon, 1 Aug 2016 21:13:01 +0100
> Cc: Óscar Fuentes <address@hidden>,
> Emacs Development <address@hidden>
>
> > diff --git a/src/fileio.c b/src/fileio.c
> > index b1f9d3c..0431cbc 100644
> > --- a/src/fileio.c
> > +++ b/src/fileio.c
> > @@ -3440,6 +3440,7 @@ by calling `format-decode', which see. */)
> > /* SAME_AT_END_CHARPOS counts characters, because
> > restore_window_points needs the old character count. */
> > ptrdiff_t same_at_end_charpos = ZV;
> > + bool run_change_hooks;
> >
> > if (current_buffer->base_buffer && ! NILP (visit))
> > error ("Cannot do file visiting in an indirect buffer");
> > @@ -4077,7 +4078,9 @@ by calling `format-decode', which see. */)
> > /* For a special file, all we can do is guess. */
> > total = READ_BUF_SIZE;
> >
> > - if (NILP (visit) && total > 0)
> > + run_change_hooks = ((NILP (visit) || !NILP (replace))
> > + && total > 0);
> > + if (run_change_hooks)
> > {
> > if (!NILP (BVAR (current_buffer, file_truename))
> > /* Make binding buffer-file-name to nil effective. */
> > @@ -4313,8 +4316,7 @@ by calling `format-decode', which see. */)
> > /* Call after-change hooks for the inserted text, aside from the case
> > of normal visiting (not with REPLACE), which is done in a new buffer
> > "before" the buffer is changed. */
> > - if (inserted > 0 && total > 0
> > - && (NILP (visit) || !NILP (replace)))
> > + if (run_change_hooks)
> > {
> > signal_after_change (PT, 0, inserted);
> > update_compositions (PT, PT, CHECK_BORDER);
> >
> >
> > Unfortunately, this amendment, by itself, doesn't fix #240[79]4, since
> > there are other causes for the change hooks being improperly invoked.
> >
> > --
> > Alan Mackenzie (Nuremberg, Germany).
>
> LGTM. It's hard to imagine anyone relying on the before-change hooks
> _not_ being run, so it should be safe, at least, to make this change.
That code is almost never run when REPLACE is non-nil, so doing that
won't help. See an earlier message that explained why.