mirror of
https://github.com/masscollaborationlabs/emacs.git
synced 2025-07-06 20:29:36 +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:
parent
2f149c074d
commit
ab983522a1
1 changed files with 16 additions and 3 deletions
|
@ -3238,9 +3238,21 @@ differences between the two buffers. */)
|
||||||
Instead, we announce a single modification for the entire
|
Instead, we announce a single modification for the entire
|
||||||
modified region. But don't do that if the caller inhibited
|
modified region. But don't do that if the caller inhibited
|
||||||
modification hooks, because then they don't want that. */
|
modification hooks, because then they don't want that. */
|
||||||
|
ptrdiff_t from, to;
|
||||||
if (!inhibit_modification_hooks)
|
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);
|
specbind (Qinhibit_modification_hooks, Qt);
|
||||||
modification_hooks_inhibited = true;
|
modification_hooks_inhibited = true;
|
||||||
}
|
}
|
||||||
|
@ -3293,8 +3305,9 @@ differences between the two buffers. */)
|
||||||
|
|
||||||
if (modification_hooks_inhibited)
|
if (modification_hooks_inhibited)
|
||||||
{
|
{
|
||||||
signal_after_change (BEGV, size_a, ZV - BEGV);
|
ptrdiff_t updated_to = to + ZV - BEGV - size_a;
|
||||||
update_compositions (BEGV, ZV, CHECK_BORDER);
|
signal_after_change (from, to - from, updated_to - from);
|
||||||
|
update_compositions (from, updated_to, CHECK_INSIDE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Qnil;
|
return Qnil;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue