1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-29 19:48:19 +00:00

Improve on last change in replace-buffer-contents

* src/editfns.c (Freplace_buffer_contents): Call modification
hooks only for the actual region where changes are made.
(Bug#31888)
This commit is contained in:
Eli Zaretskii 2018-06-30 16:50:31 +03:00
parent 2f149c074d
commit ab983522a1

View File

@ -3238,9 +3238,21 @@ differences between the two buffers. */)
Instead, we announce a single modification for the entire
modified region. But don't do that if the caller inhibited
modification hooks, because then they don't want that. */
ptrdiff_t from, to;
if (!inhibit_modification_hooks)
{
prepare_to_modify_buffer (BEGV, ZV, NULL);
ptrdiff_t k, l;
/* Find the first character position to be changed. */
for (k = 0; k < size_a && !bit_is_set (ctx.deletions, k); k++)
;
from = BEGV + k;
/* Find the last character position to be changed. */
for (l = size_a; l > 0 && !bit_is_set (ctx.deletions, l - 1); l--)
;
to = BEGV + l;
prepare_to_modify_buffer (from, to, NULL);
specbind (Qinhibit_modification_hooks, Qt);
modification_hooks_inhibited = true;
}
@ -3293,8 +3305,9 @@ differences between the two buffers. */)
if (modification_hooks_inhibited)
{
signal_after_change (BEGV, size_a, ZV - BEGV);
update_compositions (BEGV, ZV, CHECK_BORDER);
ptrdiff_t updated_to = to + ZV - BEGV - size_a;
signal_after_change (from, to - from, updated_to - from);
update_compositions (from, updated_to, CHECK_INSIDE);
}
return Qnil;